From 1 RPM to 10,000 RPM

deliriousattackInternet και Εφαρμογές Web

4 Δεκ 2013 (πριν από 3 χρόνια και 6 μήνες)

110 εμφανίσεις

From 1 RPM to 10,000 RPM

ALM in the As-A-Service Age

Steven G. Harris, SVP Products
@
stevengharris

steven.g.harris@cloudbees.com



I know how to deliver “packaged software”, but I’m
moving to an as-a-service model or mobile.


Is it really that different?


How should I change my processes?


I’m delivering functionality as a hosted service.


How can I improve and fine-tune what I’m offering?


How can I connect more intelligently with my users?


When I deliver everything as a service and consume
everything as a service, what kind of things should the
“platform” be doing for me?
The Problem
2
©2013 CloudBees, Inc. All rights reserved
CloudBees Is a Platform, Delivered As A Service
cloudbees.com

Jenkins
Master

Test
Stage

Build

Code
Jenkins
Executor
Forge Repositories
Git
SVN
mvn

Development  
Services  
(
DEV@cloud
)  
Developer  and  
Opera9ons  
Interac9on  
End  User  
Interac9on  
Run9me    
Services  
(
RUN@cloud
)  
CloudBees API
Grand
Central
Web
Console
SDK
 
Session
Clustering
MySQL
Router
Application
Partner
Ecosystem
©2013 CloudBees, Inc. All rights reserved
3
It’s  just  So*ware  as  a  Service.  But  the  so*ware  is  your  
pla$orm
 to  create,  
deploy,  and  manage  applica=ons.  
What You Interact With When You Use CloudBees
4
©2013 CloudBees, Inc. All rights reserved
CLI/SDK  
GrandCentral
 Web  Console  
IDE  
What We Deliver Continuously
cloudbees.com

Jenkins
Master

Test
Stage

Build

Code
Jenkins
Executor
Forge Repositories
Git
SVN
mvn

Session
Clustering
MySQL
Router
Application
Partner
Ecosystem
©2013 CloudBees, Inc. All rights reserved
5
Agents

DB Agent
AS Agent
AnyCloud

Message Bus
Shared Services
Identity
Provisioning
Scaling

Alerting
Monitoring
Auditing
CloudBees API
Grand
Central
Web
Console
We Use… Jenkins in the Cloud!
6
©2013 CloudBees, Inc. All rights reserved
Continuous Cloud Delivery at CloudBees
7
©2013 CloudBees, Inc. All rights reserved
Jenkins Core
Jenkins Plugins
Staging
 
Produc=on  
Web Console
SDK
API
Identity
Provisioning
Monitoring
Messaging
Services Platform
Generic App Container
Database
Router
Curated Stack
Git
SVN
Forge
Unit    
Tests  
Stage  
Cross  Service  Tests  
UAT  
Prod  
As  needed,  
mul=ple  =mes  
per  day  
Cross-Service Tests and Promoted Builds
8
©2013 CloudBees, Inc. All rights reserved
GrandCentral
 Tests  
Partner  Embeds  
RUN  Console  
DEV  Console  
API  Tests  
OAuth
 Tests  
SDK  Tests  
Deployer
 Tests  
Cloud  Foundry  
App  Engine  
API  Service  
Web  Console  
Continuous Cloud Delivery at CloudBees
9
©2013 CloudBees, Inc. All rights reserved
Jenkins Core
Jenkins Plugins
Web Console
SDK
API
Identity
Provisioning
Monitoring
Messaging
Services Platform
Generic App Container
Database
Router
Curated Stack
Git
SVN
Forge
Unit    
Tests  
Stage  
Cross  Service  Tests  
UAT  
Prod  
As  needed,  
every  couple  of  
days  
GrandCentral
 
Release  
DEV@cloud
 
Release  
RUN@cloud
 
Release  
Staging
 
Produc=on  
What’s So Different About As-A-Service?
10
“Mental picture” of most of today’s software vendors
We  use  
SaaS
 
extensively.  It  makes  
us  
sooooo
 
produc9ve…  
…  at  delivering  
packaged  soFware  
to  our  customers!  
#FAIL  
©2013 CloudBees, Inc. All rights reserved
11


Your customers are no different than you


They don’t like…


Shelf-ware, setup, patches, upgrading releases, etc.


They do like…


Fast time-to-market, pay-as-you-go, elasticity, mobility, etc.
Do Unto Others…
©2013 CloudBees, Inc. All rights reserved
12


Drivers are accelerating this transition to Cloud-based
services:


Mobile, Mobile, Mobile, Social, Big Data, Etc.


Time-to-market is more important than ever


“I need it yesterday!”


Can’t afford 18m cycles


Discovery-mode


i.e., Don’t spend 18m building what I am not sure I really need


And SaaS is already pulling more data into the cloud


Slowly redefines what data is “remote”


On-premise is the new legacy
Drivers & Acceleration
©2013 CloudBees, Inc. All rights reserved
13


A cloud service is
not
just “hosted software”


i.e., take your current software, host it, and keep doing what
you’ve been doing to date


Delivering as a service affects…


The way you create, test, and deploy software


The opportunities you have to experiment cheaply


The cost of developing and maintaining software


The “short cuts” you can take compared to packaged software


The way you engage with your customers


The quality of information you have about your customers
Software vs. Cloud Service
©2013 CloudBees, Inc. All rights reserved
14


Release v1.0


Gather requirements for v2.0
À



Work on v2.0
À



Release v2.0
don’t screw it up: once it is out, it is out.


Have your customer upgrade


Support v1.0 for years


Support and patch dozen of
“branches” in parallel


Gather requirements for v3.0
À



Work on v3.0
À



Release v0.1


Implement micro-feature, deploy,
measure success, keep or kill
P



Implement micro-feature, deploy,
measure success, keep or kill
P



Patch a bug


Implement micro-feature, deploy,
measure success, keep or kill
P



Implement micro-feature, deploy,
measure success, keep or kill
P



Implement micro-feature, deploy,
measure success, keep or kill
P

To Be Or Not To Be…
©2013 CloudBees, Inc. All rights reserved
Months/Years
 
Days/Weeks
 
Packaged  So*ware  
As-­‐A-­‐Service  
15
Time  
v1.0    
Release  
v2.0    
Release  
Time  
v1.0.x    
Con9nuous  
Releases  
Risk/
Cost  
Risk/
Cost  
Packaged  So*ware  
As-­‐A-­‐Service  
Lower Risk and Cheap Experimentation
Same  basic  value  prop  as  agile,  but  code  is  being  released  con=nuously  
©2013 CloudBees, Inc. All rights reserved
16
Use Case: Lifecycle Marketing
Marketing!? Wait, aren’t I at
EclipseCon
?
17
Fairly  
sta=c  
customer  
lists  
Lifecycle Marketing
in the Packaged Software World
Lead  
Nurturing  
Considera=on  
Sale  
Post  
Sale  
They  no9ced  us!  
This  is  why  we  are  special  
Seems  like  they  might  buy  
Sold!  
Upsell!  
Most  systems  in  house:  Email  marke9ng,  customer  lists  
©2013 CloudBees, Inc. All rights reserved
18
Marke=ng  
Lifecycle Marketing
in the Cloud Era (
Freemium
Model)
Lead  
Nurturing  
Considera=on  
Free  Tier  
Base  Tier  
Add  
ons
 
Enterprise  
Tier  
Post  
Sale  
Most  systems  external:  Hosted,  best-­‐of-­‐breed  services  
Users  can  move  freely  up    
and  down  the  9ers  
Evangelist  
 
“Growth    
Hacker”  
 
Customer  
Success  
Manager  
©2013 CloudBees, Inc. All rights reserved
19
Short  cycle,  as  users    
can  try  the  free  9er  and  
make  the  determina9on  on    
product  feasibility  themselves  
Marke=ng  
Continuous Delivery
What does that have to do with marketing?
20
Packaged Software
vs
Cloud Software Delivery
Version  
1  


Shipped  
May  
2011  
Version  
2  


Shipped  
May  
2012  
Version  
3  


Shipped  
May  
2013  


Development  Methodology  Varies  


Bonus:  “We  use  CI”  
Update  CSS  
1
st
 Feb  
Move  bu]on  
1
st
 Feb  
New  tab  
2
nd
 Feb  
Overhaul  UI  
13
th
 Feb  
Bug  fix  
14
th
 Feb  


Unachievable  without  Con=nuous  
Integra=on  and  Con=nuous  Delivery  
©2013 CloudBees, Inc. All rights reserved
21
Subscribed to a service


Jenkins


RUN@cloud
(Deployment
PaaS)


Forge (
Git
, SVN)


DB service


Partner service


MongoHQ



NewRelic



PaperTrail




Performed an action


Web UI login


Jenkins


Created a Job, Installed a
plugin, Ran a job…


Deployment PaaS


Deployed an app, restarted
app, app stopped, app
hibernated…


Others


Canceled account, added a
paid DB, added a user
Capturing Events of Interest at CloudBees
©2013 CloudBees, Inc. All rights reserved
22


Continuous improvements on events


Continuously add new “finer” grained events based on usage
feedback


Rapid deployments of new events using Continuous
Deployment
Continuous Integration, Delivery and… Engagement
23
©2013 CloudBees, Inc. All rights reserved
Details – User Engagement
24
Traditional Lifecycle Marketing
©2013 CloudBees, Inc. All rights reserved
25
Tip  of  the  Week  
for  ‘x’  weeks  
Product  
Signup  


Time and activity
based


Grade users based on
risk profile


Separate onboarding
from established users


Offer hands-on help
for established users
As-A-Service
LifeCycle
Marketing
Tracking “For Free” User Engagement Stages

26
©2013 CloudBees, Inc. All rights reserved
Eden
 
Sign-­‐Up  
Tenured  
OldSpace
 
PermSpace
 
Use?  
Use?  
Use?  
1  
wk
 
2  
wks
 
3  
wks
 
4  
wks
 
Time  
Onboarding  
Genera9onal  
Copying  
Mark  &  Sweep  
Use?  
Use?  
Established  
Evalua9ng
 
Use?  
Y  
Y  
Y  
N  
N  
N  
N  
N  
N  
Y  
Y  
Y  
As-A-Service
LifeCycle
Marketing
Keeping Paying Users Happy

27
©2013 CloudBees, Inc. All rights reserved


Track number and types of activity
over time


Scale and adjust “smart” communication
over time


Users can become inactive and then
reactivate


Technical, not sales communication
Ac9ve
 
Paid  
Spo]y  
Inac9ve  
Lost  
Use?  
Use?  
Use?  
1  
wk
 
2  
wks
 
3  
wks
 
4  
wks
 
Time  
Paying  
Y  
Y  
Y  
N  
N  
N  
Using Other Cloud Services
The dance to make all this happen
28
Segmenting Users for Engagement
©2013 CloudBees, Inc. All rights reserved
29
1.  Deliver  new  event  to  prod  
2.  Log  events  during  usage  
3.  Set  up  appropriate  ac9ve  list  
4.  Sync  to  SF  
5.  Pull  into  “smart  lists”  
6.  Communicate  w/user  
7.  Monitor  effec9veness  
8.  Go  to  1  
Getting Useful Information To Your Users
1.  Deliver  new  event  to  prod  
2.  Log  events  during  usage  
3.  Set  up  appropriate  ac9ve  list  
8.  Pull  into  “smart  lists”  
9.  Insert  “
webhooks
”  
10.  Communicate  w/  user  
11.  Monitor  effec9veness  
12.  Go  to  1  
©2013 CloudBees, Inc. All rights reserved
30
4.  Pull  list  
5.  Massage  data  
6.  Generate  usage  
         graphs  
7.  Expose  as  web  
         service  
Events Tracking
John  Doe  used  “CloudBees  
Deployer
”  to  deploy  app    
from  Jenkins  on  CloudBees  to  
RUN@cloud
 
public  void  
deploymentSuccess
(String  scope,  String  account,  String  email)  {  
               track(account,  email,  "Deployment  successful",  scope);}  
private  synchronized  void  track(String  org,  String  user,  String  ac9vity,  String  module)  {  
Request  request  =  new  
RequestBuilder
("GET")  
                               .
setUrl
("h]p://
sdr.totango.com
/
pixel.gif
/")  
                               .
addQueryParameter
("
sdr_s
",  key).
addQueryParameter
("
sdr_o
",  org)  
                               .
addQueryParameter
("
sdr_u
",  user).
addQueryParameter
("
sdr_a
",  ac9vity)  
                               .
addQueryParameter
("
sdr_m
",  module).build();  
Singletons.asyncH]pClient
(context).
executeRequest
(request);  
©2013 CloudBees, Inc. All rights reserved
31
h]p://sdr.totango.com/pixel.gif/
?  
       
sdr_s
=<Key>@
sdr_o
=<Org>&
sdr_u
=<User>  &
sdr
=<Ac9vity>&
sdr_m
=<Module>  
When:
 
Track:
 
CloudBees  Server  Side  
Lists to Track Activity
Weekly-­‐ac9ve:  All  users  who  have  used  any  module  in  the  last  week  
©2013 CloudBees, Inc. All rights reserved
32
Collect:
 
Setting Up Campaigns, Service Integrations
©2013 CloudBees, Inc. All rights reserved
33
Customized Processing of Lists
(
def
 
totango
-­‐
api
-­‐endpoint  "h]ps://
app.totango.com
/
api
/v1/accounts/
ac9ve_list
/…/
current.json
”)  
defn
 
totango
-­‐get-­‐data  [site  token  
params
]  
   (let  [user-­‐data  
               (client/get  site  
                   {:headers  {"Authoriza9on"  token}  
                     :query-­‐
params
 
params
 
                     :as  :
json
-­‐string-­‐keys})]  
       (user-­‐data  :body  )))  
;  Get  a  map  account-­‐>list  of  non-­‐CB-­‐emails  
(
defn
 map-­‐account-­‐to-­‐users  [accounts]  
   ;  account  =    n  *  users  
         (map  get-­‐user-­‐account-­‐id  accounts))  
©2013 CloudBees, Inc. All rights reserved
34
What  were  ac9ve  users  doing  on  the  pla}orm  last  week?  
Ques=on:
 
Access:
 
Pull  Raw  Data  
Extract  Map  
Multiplying Continuous Delivery Benefits
In The As-A-Service World

35
©2013 CloudBees, Inc. All rights reserved
Code  
Build  
Test  
Stage  
Deploy  
Code  
Build  
Test  
Stage  
Deploy  
If  only  I  had  
access  to…    
I  think  we  can  
expose  that!  
From  feature  request  to  usage  in  CloudBees  was  2  weeks!  
Not  possible  without  Con=nuous  Delivery.  
#FTW  
cloudbees.com

What’s up with this new
framework!
Sampling Exhaust Fumes
36
CloudBees  
Git
 
Repo  
Database  
Build/Test  
db:create
 
App  
Partner  
Service  
Partner  
Service  
CloudBees API
Grand
Central
Web
Console
app:create
 
Jenkins  job  create  
Bind  
Bind  
Trigger  
Deploy  
Wow!
At your
service
©2013 CloudBees, Inc. All rights reserved
cloudbees.com



What is interesting to
users?


What languages and
frameworks are they
using?
Sampling Exhaust Fumes
37
©2013 CloudBees, Inc. All rights reserved
CloudBees  
Git
 
Repo  
Database  
Build/Test  
App  
Partner  
Service  
Partner  
Service  
Bind  
Bind  
Trigger  
Deploy  
Wow!
At your
service


Popularity of
Play! is very
interesting


Strength of
traditional Java
stacks


Mixed with JS


Strong showing
of node
Data Driven Product Investment
38
©2013 CloudBees, Inc. All rights reserved
Play2  
Java  EE6  WP  
Hibernate+Tomcat  
Spring+Hibernate  CF  
Grails  PetClinic  CF  
Node.js  
Glassfish  
AngularJS  
Java  GAE  
Ac=vi=  Explorer  
Sencha+Clojure  
Facebook  
Backbone+JAX-­‐RS  
Scala+Li*  
Futures
What’s the meaning of “platform” in an as-a-service world?
39
Platform Evolution To Cloud Services
40
hep://
neflix.github.com
/  
hep://
techblog.neflix.com
/2013/03/introducing-­‐first-­‐
neflixoss
-­‐recipe-­‐
rss.html
 
©2013 CloudBees, Inc. All rights reserved
But the platform knows…


OAuth2 tokens


keys, secrets


Service-specific setup
Example – Platform Role in the As-A-Service Age
41
©2013 CloudBees, Inc. All rights reserved
MyApp
 
MyService2  
MyService1  
ms1 = MyService1Factory(…);!
ms1.auth(token);!
/* … more service-specific boilerplate … */!
ms1.doSomethingInteresting(…);!
result1 = ms1.getResult(…);!
!
ms2 = MyService2Factor(…);!
ms2.setCredentials(key, secret);!
/* … more service-specific boilerplate … */!
result2 = ms2.getStuff(result1, …);!
!
/* do something useful */!
myAppResult
=
Mashup.things
(result1,results);!
For  each  service,  you  set  up:  
 
*.jar  =>    lib  
 
*.proper9es  
 
…  more  …  
And  use  them  by  wri9ng  code  like  this:  
Platform can handle…


Service-specific setup


Secure connections


Wiring with app, like
datasources

Example – Platform Role in the As-A-Service Age
42
©2013 CloudBees, Inc. All rights reserved
MyApp
 
MyService2  
MyService1  
!
!
@Inject MyService1 ms1;!
ms1.doSomethingInteresting(…);!
result1 = ms1.getResult(…);!
!
!
!
@Inject MyService2 ms2;!
result2 = ms2.getStuff(result1, …);!
!
/* do something useful */!
myAppResult
=
Mashup.things
(result1,result2);!
So  why  not  let  the  pla}orm  do  the  work?  


Creating and delivering software as a service is
fundamentally different than packaged software


Continuous delivery, preferably in the cloud, is a
necessity to match the as-a-service model


Realtime
feedback, driven by developers, is key to
improving user experience and product investments


The platform’s role is changing in the as-a-service world
Conclusions
43
©2013 CloudBees, Inc. All rights reserved
Thank
You!
steven.g.harris@cloudbees.com
 
@
stevengharris
 
©2013 CloudBees, Inc. All rights reserved
44
#
cdcloud
 
45
©2013 CloudBees, Inc. All rights reserved