13
IT support on demand

Project X - workshop's resaults

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Project X - workshop's resaults

IT support on demand

Page 2: Project X - workshop's resaults

1

Page 3: Project X - workshop's resaults

2

Page 4: Project X - workshop's resaults

Backend specificationHosting

There are several options available:

Heroku

Heroku is a platform as a service (PaaS) that allows developers to deploy their

application in the cloud. It’s the most popular cloud-based platform for Ruby on

Rails developers but it comes with a price tag. It’s easier to use and faster to develop

on than EC2 but the most basic setup will probably not be enough for our app.

Pricing: https://www.heroku.com/pricing , estimated: $84.50/mo at the

beginning

Amazon EC2

Amazon EC2 is the most popular cloud-based platform but it’s also the most

annoying to use if you’re not having dozens of servers with identical setup. It’s

targeted at enterprise-class customers with it’s huge range of customization but the

price tag and ease of use is also enterprise. Even though it’s the most recommended

solution, we’d advice against it, mostly because of the setup problems that will

probably slow down the development. It may be a good idea to migrate to EC2 after

the application gains traction as it’s the most scalable and solid platform with

virtually no outage at all.

Pricing: http://aws.amazon.com/ec2/pricing/ , estimated: at least $100/mo,

probably much more (it’s hard to estimate due to complicated pricing scheme and

single instance limitations)

3

Hetzner Online AG

This is the only non-cloud solution proposed and it’s the one we recommend. Cloud-

based solution might be a good idea later on but it’s also much more expensive and

unnecessary until the project gets enough user base to grow out of single machine. It’s

also possible to create automatic backups in there and both stability and uptime of

such a server is almost as high as cloud.

When buying new server we usually use Hetzner’s Robot - a service used to buy

second-hand servers at very reasonable prices (we never had any failure or outage

with them yet).

We recommend using Hetzner server for development because it’s the most cost

and time efficent solution. After the app passes MVP stage and gets to 2.0 version we

can switch to either Heroku and EC2 after we better learn the needs and requirements

of the app.

Pricing: https://robot.your-server.de/order/market/ , estimated: €30-40/mo at the

beginning

Page 5: Project X - workshop's resaults

There are several options available:

Heroku

Heroku is a platform as a service (PaaS) that allows developers to deploy their

application in the cloud. It’s the most popular cloud-based platform for Ruby on

Rails developers but it comes with a price tag. It’s easier to use and faster to develop

on than EC2 but the most basic setup will probably not be enough for our app.

Pricing: https://www.heroku.com/pricing , estimated: $84.50/mo at the

beginning

Amazon EC2

Amazon EC2 is the most popular cloud-based platform but it’s also the most

annoying to use if you’re not having dozens of servers with identical setup. It’s

targeted at enterprise-class customers with it’s huge range of customization but the

price tag and ease of use is also enterprise. Even though it’s the most recommended

solution, we’d advice against it, mostly because of the setup problems that will

probably slow down the development. It may be a good idea to migrate to EC2 after

the application gains traction as it’s the most scalable and solid platform with

virtually no outage at all.

Pricing: http://aws.amazon.com/ec2/pricing/ , estimated: at least $100/mo,

probably much more (it’s hard to estimate due to complicated pricing scheme and

single instance limitations)

Backend specificationHosting

4

Hetzner Online AG

This is the only non-cloud solution proposed and it’s the one we recommend. Cloud-

based solution might be a good idea later on but it’s also much more expensive and

unnecessary until the project gets enough user base to grow out of single machine. It’s

also possible to create automatic backups in there and both stability and uptime of

such a server is almost as high as cloud.

When buying new server we usually use Hetzner’s Robot - a service used to buy

second-hand servers at very reasonable prices (we never had any failure or outage

with them yet).

We recommend using Hetzner server for development because it’s the most cost

and time efficent solution. After the app passes MVP stage and gets to 2.0 version we

can switch to either Heroku and EC2 after we better learn the needs and requirements

of the app.

Pricing: https://robot.your-server.de/order/market/ , estimated: €30-40/mo at the

beginning

Page 6: Project X - workshop's resaults

Backend specificationPayment service providers

There are several payment service providers from which to choose:

PayPal

PayPal is one of the most popular and known payment service providers. Amazon

Payments and Google Wallet were created respectively by Amazon and Google to

handle their own payments but were given to other developers to tap into. All of

those services require separate, external account in one of those services which

may be a good or a bad thing depending on target audience. In case of our project

where the most important thing is being as transparent and easy to use by

non-technical people, using one of those services may not be such a good idea due

to additional complexity of setting up an additional account.

Braintree

Braintree is a service that allows you to integrate various payment options under

one API. They support PayPal, Apple Pay, Coinbase, Vemno and credit cards. Their

processing fee is a bit higher than Stripe, and the support of additional payment

gateways is not necessary for this Project, at least not until 2.0 stage where we can

switch.

Stripe

The last one, our favourite is Stripe and this is our recommendation. Stripe became

one of the most popular payment service providers mostly because of the easy to

use API, low transaction fees and being easy to use. We can work with credit card

data without ever having access to it which makes it easier and more secure to

handle payments. We can also save the credit card data securely in our app and

create recurring payments. Additional bonus is the fact that we already have experi-

ence in integrating Stripe into numerous projects.

5

Page 7: Project X - workshop's resaults

Backend specificationIn-app and in-API analytics

There are a lot of things we can track in both app and API access, starting with the

most basic like who, when and where is ordering services using the app. The bigger

problem is with filtering and presenting this data in easy to read and query data.

Previously we had a lot of success with using services like Segment and Keen.io to

track all the data. Those two work in pair where Segment is used as a hub for various

tracking services, including (but not only) Keen.io.

Because gathering data from the start is more important than being able to parse

and query it (more information from the start = better), we’re recommend starting

with integration of basic data gathering from the start of the project and making this

data usable a second priority.

6

Page 8: Project X - workshop's resaults

Backend specificationTechnology stack

Ruby and Ruby on Rails

Ruby is a dynamic, reflective, object-oriented, general-purpose programming lan-

guage.

Ruby on Rails, or simply Rails, is an open source web application framework written

in Ruby.

Services

Nginx - Open source reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP

protocols, as well as a load balancer, HTTP cache, and a web server.

We’re going to use it as a reverse proxy server and load balancer.

Puma - Simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack

applications. We’re going to use it as a HTTP server.

PostgreSQL - PostgreSQL, often simply “Postgres”, is an object-relational database

management system (ORDBMS) with an emphasis on extensibility and standards-

compliance. We’re going to use it as a persistent data storage for the app.

Redis - Redis is a data structure server. It is open-source, networked, in-memory,

and stores keys with optional durability. We’re going to use it mostly for cache,

in-memory data storage and in tandem with Sidekiq.

Sidekiq - Simple, efficient background processing for Ruby. Sidekiq uses threads to

handle many jobs at the same time in the same process. We’re going to use it for

background tasks.

7

Libraries / gems

EventMachine - EventMachine is an event-driven I/O and lightweight concurrency

library for Ruby. We’re going to use it for real-time mapping for user and gps track-

ing for engineer.

Devise - Devise is a flexible authentication solution for Rails based on Warden.

We’re going to use it for user accounts and possibly social media log-in in the future.

Doorkeeper - Doorkeeper is a gem that makes it easy to introduce OAuth 2 provider

functionality to your Rails or Grape application. We’re going to use it for authoriza-

tion between iOS app and server using the most popular standard, OAuth 2.0.

Carrierwave - Simple and extremely flexible way to upload files from Ruby applica-

tions We’re going to use it for file and/or photo upload where necessary.

Stripe gem - Stripe Ruby bindings. We’re going to use it for payments.

Page 9: Project X - workshop's resaults

Ruby and Ruby on Rails

Ruby is a dynamic, reflective, object-oriented, general-purpose programming lan-

guage.

Ruby on Rails, or simply Rails, is an open source web application framework written

in Ruby.

Services

Nginx - Open source reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP

protocols, as well as a load balancer, HTTP cache, and a web server.

We’re going to use it as a reverse proxy server and load balancer.

Puma - Simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack

applications. We’re going to use it as a HTTP server.

PostgreSQL - PostgreSQL, often simply “Postgres”, is an object-relational database

management system (ORDBMS) with an emphasis on extensibility and standards-

compliance. We’re going to use it as a persistent data storage for the app.

Redis - Redis is a data structure server. It is open-source, networked, in-memory,

and stores keys with optional durability. We’re going to use it mostly for cache,

in-memory data storage and in tandem with Sidekiq.

Sidekiq - Simple, efficient background processing for Ruby. Sidekiq uses threads to

handle many jobs at the same time in the same process. We’re going to use it for

background tasks.

Backend specificationTechnology stack

8

Libraries / gems

EventMachine - EventMachine is an event-driven I/O and lightweight concurrency

library for Ruby. We’re going to use it for real-time mapping for user and gps track-

ing for engineer.

Devise - Devise is a flexible authentication solution for Rails based on Warden.

We’re going to use it for user accounts and possibly social media log-in in the future.

Doorkeeper - Doorkeeper is a gem that makes it easy to introduce OAuth 2 provider

functionality to your Rails or Grape application. We’re going to use it for authoriza-

tion between iOS app and server using the most popular standard, OAuth 2.0.

Carrierwave - Simple and extremely flexible way to upload files from Ruby applica-

tions We’re going to use it for file and/or photo upload where necessary.

Stripe gem - Stripe Ruby bindings. We’re going to use it for payments.

Page 10: Project X - workshop's resaults

Backend specificationOther technical difficulties during development

There are several things in this project that we’ll either implement for the first time

on this scale or we assume they may take more time or can be further developed in

the future.

Live map preview and GPS tracking

Both live map preview (feature that allows user to see where engineer currently is

and where are the engineers nearby) and GPS tracking are something we haven’t

had a change to implement yet. The decision was made to use WebSockets for the

sake of speed and performance (AJAX requests would be much slower and re-

source- consuming).

This will be our first venture into writing fast and scalable daemons using EventMa-

chine. This component will also be as self-contained as possible so if in the future a

need arises to rewrite it to something even faster, it’ll be possible without modifying

rest of the underlying platform.

Contractor matching algorithm

This algorithm will be very basic at the beginning, taking into account only distance

and categories but there’s a lot of room for improvement, for example mixing that

with reviews or even doing some kind of task complexity assessment. It’ll require

extensive amount of time and research and it’s just a fine-tuning so we recommend

doing that much, much later on.

9

Page 11: Project X - workshop's resaults

iOS specification

Objective C or Swift

Objective C and Swift are a general-purpose, object-oriented programming lan-

guages. They are the main programming languages used by Apple for the iOS appli-

cations. Swift was introduced in 2014, and therefore it is still little buggy and in flux.

Using Swift may extend the developement time, so we recommend using Objective

C.

Maps

There are several options available, Apple’s MapKit and Google’s Map SDK are the

most popular.

Apple MapKit is easier to implement and has better integration into iOS. Google

Maps SDK offers better data quality and more advanced features. However, devel-

opers are limited to 100,000 API requests by users per day, for more you have to

pay. Our recommendation is to use Apple’s MapKit, because it is native and free.

In-App feedback

Leanplum - complete solution for mobile marketing automation. Leanplum has the

following basic offerings:

A/B testing (It is a simple way to test changes to app against the current design and

determine which ones produce positive results)

content management (Allows to personalize and publish content dynamically)

marketing automation (Allows to create and automate targeted mobile in-app mes-

sages and push notifications)

mobile analytics

Pricing: https://www.leanplum.com/pricing

10

Instabug - Instabug is a bug tracking tool that can be integrated into mobile apps, to

provide a seamless way for users to send their feedback or report bugs, as well as

detailed environment report for developers.

Pricing: https://instabug.com/pricing

Fabric (Crashlytics) - crash reporting and beta distributing system.

Other libraries and framworks (ObjectiveC/Swift):

AFNetworking/Alamofire - most popular networking library for iOS.

Mantle/ObjectMapper - allow to write a simple model layer and parsing data.

Card.io - credit card scanning for iOS.

BKMoneyKit - UI controls for entering credit card info manually.

PromiseKit - PromiseKit is implementation of promises for iOS. Makes network

communication easier.

Facebook SDK - for login with Facebook.

Optimize the mission-critical metrics of your app with mobile A/B testing and pow-

erful analytics. Easy to integrate iOS, Android, Unity, HTML5 SDKs + REST API.

Instabug the first bug tracker optimized for mobile apps and best in-app feedback

mechanism

Page 12: Project X - workshop's resaults

Objective C or Swift

Objective C and Swift are a general-purpose, object-oriented programming lan-

guages. They are the main programming languages used by Apple for the iOS appli-

cations. Swift was introduced in 2014, and therefore it is still little buggy and in flux.

Using Swift may extend the developement time, so we recommend using Objective

C.

Maps

There are several options available, Apple’s MapKit and Google’s Map SDK are the

most popular.

Apple MapKit is easier to implement and has better integration into iOS. Google

Maps SDK offers better data quality and more advanced features. However, devel-

opers are limited to 100,000 API requests by users per day, for more you have to

pay. Our recommendation is to use Apple’s MapKit, because it is native and free.

In-App feedback

Leanplum - complete solution for mobile marketing automation. Leanplum has the

following basic offerings:

A/B testing (It is a simple way to test changes to app against the current design and

determine which ones produce positive results)

content management (Allows to personalize and publish content dynamically)

marketing automation (Allows to create and automate targeted mobile in-app mes-

sages and push notifications)

mobile analytics

Pricing: https://www.leanplum.com/pricing

iOS specification

11

Instabug - Instabug is a bug tracking tool that can be integrated into mobile apps, to

provide a seamless way for users to send their feedback or report bugs, as well as

detailed environment report for developers.

Pricing: https://instabug.com/pricing

Fabric (Crashlytics) - crash reporting and beta distributing system.

Other libraries and framworks (ObjectiveC/Swift):

AFNetworking/Alamofire - most popular networking library for iOS.

Mantle/ObjectMapper - allow to write a simple model layer and parsing data.

Card.io - credit card scanning for iOS.

BKMoneyKit - UI controls for entering credit card info manually.

PromiseKit - PromiseKit is implementation of promises for iOS. Makes network

communication easier.

Facebook SDK - for login with Facebook.

Optimize the mission-critical metrics of your app with mobile A/B testing and pow-

erful analytics. Easy to integrate iOS, Android, Unity, HTML5 SDKs + REST API.

Instabug the first bug tracker optimized for mobile apps and best in-app feedback

mechanism

Page 13: Project X - workshop's resaults

Initial estimation

Proof of concpt build:

Design:

- CI including company name proposal with domain, logotype, typography, color

scheme, etc - ~ £ 1,500

- iPhone tailored designs for mobile application - ~ £ 2,600

- iPad tailored designs for mobile application - ~ £ 1,000

Backend:

- time based development supproting core features of the project - ~ £ 4,200

Mobile app:

- time based development according to designs supporting core features of the

application - ~ £ 11,200

MPV build:

Design:

- marketing assets

- project website

( detailed scope for the above has to be discussed )

Backend:

- time based development supproting core features of the project - ~ £ 8,400

Mobile app:

- time based development according to designs supporting core features of the

application - ~ £ 14,000

12