How can we increase sales?

A/B Testing

Conversion

  • act of converting site visitors into paying customers
  • proportion of visits to a website which take action to go beyond a website visit

FeatureToggle

public class TopSellerRecommendationPanel extends AbstractShopBasePanel {

    @SpringBean
    private FeatureToogleBean featureToogleBean;

    ...

    @Override
    protected void onConfigure() {
      super.onConfigure();
      setVisible(featureToogleBean.isTopSellerFeatureEnabled());
    }

    ...

}

Checkout - Variant A

Checkout - Variant B

Project

  • Scrum + 98% forecast (commitment) guarantee
  • regular deployment 1 x 2 weeks
  • hot fix/feature deployments 2-4 per sprint
  • around 1 1/2 h to get into production
    • 35min per build
    • 40min per ITIL stuff:
      • calls
      • ticket
      • etc.
    • 20min per manual deployment

How can we deliver faster?

What have we done?

How does it work?

Disadvantages of a Monolith

  • Reduction of development speed
  • Increase of turnaround times
  • Increase of build time
  • Strange behavior after changes
  • Increase of time to market
  • A/B testing of process changes nearly impossible
  • Scalability (e.g. application and teams)

How can we build software smarter?

Microservice

Microservice Architecture

Service-Oriented Architecture (SOA / 1996)

  • SOA is an architectural style that supports service-orientation.
  • Service-orientation is a way of thinking in terms of services.
  • A service:
    • Is a logical representation of a repeatable business activity
      (e.g., submit order)
    • Is self-contained
    • May be composed of other services
    • Is a “black box” to consumers of the service

SOA taxonomy

Differences to SOA

  • Lightweight infrastructure and protocols (e.g. REST)
  • Greater flexibility of architecture (e.g. can contain GUI)
  • Managed as products, with their own lifecycle and delivery
  • Deployed as processes (Unix packages or Container)

Online Shop - Use cases

Online Shop - Migration

Challenges of Microservices

  • Require integration.
  • Require a multi deployment pipeline.
  • Require automation of deployment and configuration.
  • Require logging and monitoring.

Leavitt - Communication Structure

Type Star Chain Circle Complete Structure
 
centralization high medium low very low
communication low medium much very much
controllability much medium low very low

Conway's Law

Rest Communication

{
        firstname: "Bernd",
        lastname: "Zuther",
        street: "Elsenheimerstraße 55a",
        city: "München",
        zip: 80687
}

Rest Communication

{
        firstname: "Bernd",
        lastname: "Zuther",
        birthday: "1983/08/15",
        street: "Elsenheimerstraße 55a",
        city: "München",
        zip: 80687
}

Rest Communication

{
        firstname: "Bernd",
        lastname: "Zuther",
        birthday: "1983/08/15",
        addresses : [{
          street: "Elsenheimerstraße 55a",
          city: "München",
          zip: 80687,
          type: "WORK"
        }]
}

Versionless Rest Communication

{
        firstname: "Bernd",
        lastname: "Zuther",
        birthday: "1983/08/15",
        street: "Elsenheimerstraße 55a",
        city: "München",
        zip: 80687,
        addresses : [{
          street: "Elsenheimerstraße 55a",
          city: "München",
          zip: 80687,
          type: "WORK"
        }]
}

Alternatives

  • URL:
    • simply whack the API version into the URL, e.g. https://shop/api/v2/cart/all
  • Custom request header:
    • same URL as before but add a header “api-version: 2”
  • Accept header:
    • modify accept header to specify the version, e.g. “Accept: application/vnd.cart.v2+json”

Multi Deployment Pipeline

Deployment

Unix Package Repository

How can we describe infrastructure and products?

Docker Environment

Kubernetes - Cluster Management

Pod

kind: Pod
desiredState:
  manifest:
    containers:
      - name: mongodb
        image: dockerfile/mongodb
        cpu: 100
        memory: 50000000
        ports:
          - containerPort: 27017

Replication Controller

kind: ReplicationController,
desiredState:
  replicas: 4
  podTemplate:
    desiredState:
      manifest:
        containers:
          - name: product
            image: zutherb/product-service

Service

Experiment with your customers!

Summary

Pro Needs
better A/B testing monitoring
effective technologies centralised logging
solution orientation fully automated deployment pipeline
incremental migration cluster management
Microservices do not guarantee more conversion!
You need to run experiments with your customers!

<Thank You!>

Links

Links

Images

Images