↓Skip to main content

Self-service platforms run on context

To provide capabilities the platform needs context

Hello! Today I’m writing to you from the Compass AI and Tech Summit in Budapest, where yesterday I spoke about Implementing a self-service data platform. I think it went well :) Video should be online in the next couple of weeks.

This weeks newsletter comes from that talk, and looks at the context required to build a self-service data platform.

There’s also links to semantic layers and headless BI, BigQuery graph as a semantic layer, and the easiest tracking setup in the world.


Self-service platforms run on context

The goal of a self-service platform is to allow its users to request the capabilities they need through a self-serve interface so they can deliver at their own pace, without waiting for someone to action a ticket and manually provide that capability.

But for the platform to deliver the capability, it needs to know a bit about what you’re building and what its requirements are.

For example, an internal developer platform (IDP) might provide the capability to deploy a service to a compute cluster with autoscaling and metric collection. Before it can provide that capability, it needs to know:

  • What the CPU and memory requirements are
  • What metric to monitor to trigger autoscaling, and how many nodes to scale to
  • What metric collector to use

These requirements are often provided in a YAML file, such as the following:

flaskapp:
  name: flask-app-api
  resources:
    limits:
      cpu: 128m
      memory: 500Mi
    requests:
      cpu: 128m
      memory: 500Mi
loadbalancer:
  enabled: true
autoscaling:
  enabled: true
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80
prometheus:
  enabled: true

This can then be used by a tool such as Helm to deploy that service to Kubernetes.

Hand-drawn style diagram showing a YAML document labeled "YAML" with an arrow pointing to a box labeled "Helm", which has an arrow pointing to the Kubernetes helm wheel logo labeled "Kubernetes".

To build a self-service data platform we also need to know about the data that is being created and its requirements.

For example, for our platform to provision a table in a data warehouse, run some data quality checks, and anonymise data when it is past its retention period, it would need to know:

  • The schema, including data types
  • The data quality checks to run, and where to send alerts
  • Which fields are sensitive and how to anonymise them

These requirements and context are provided by the data contract, such as in the following example, which is based on ODCS:

version: 1.0.0
name: Customer
schema:
  - name: customer
    description: A customer of our e-commerce website.
    properties:
      - name: id
        logicalType: string
        description: The unique identifier for the customer.
        required: true
      - name: name
        logicalType: string
        description: The name of the customer.
        required: true
        classification: restricted
        customProperties:
          - property: anonymizationStrategy
            value: hex
      - name: email
        logicalType: string
        description: The email address of the customer.
        required: true
        quality:
          - metric: invalidValues
            mustBe: 0
            unit: rows
            arguments:
              pattern: "^[a-zA-Z0-9._%+-]+@...$"
        classification: restricted
        customProperties:
          - property: anonymizationStrategy
            value: email
      - name: language
        logicalType: string
        description: The language preference of the customer.
        quality:
          - metric: invalidValues
            mustBe: 0
            unit: rows
            arguments:
              validValues: [en, fr, es]

It’s that context, provided by the data producer, which allows us to build out the data platform capabilities to support the creation, governance, and consumption of data.

Hand-drawn style diagram showing a YAML file with an arrow pointing to three vertical boxes labeled "Provision", "Quality checks", and "Anonymisation", which flow via another arrow into a database cylinder labeled "Data warehouse".

Your Data Needs A User Manual: Semantic Layers and Headless BI by Nathan Derave and Pascal Knapen (Dataminded) (YouTube)

I enjoyed this webinar earlier this week. Balanced look at the options for semantic layers and their pros/cons.

BigQuery Graph as a semantic layer by Eugen Sopot

Also on semantic layers, here’s an example building one with the relatively new BigQuery Graph feature.

The easiest tracking setup in the world by Timo Dechau

Not new but new to me. Focus on what you need, not what you can collect.


Being punny 😅

Solar power is the future, but it won’t happen overnight.


Thanks! If you’d like to support my work…

Thanks for reading this weeks newsletter — always appreciated!

If you’d like to support my work consider buying my book, Driving Data Quality with Data Contracts, or if you have it already please leave a review on Amazon.

Enjoy your weekend.

Andrew


Want great, practical advice on implementing data mesh, data products and data contracts?

In my weekly newsletter I share with you an original post and links to what's new and cool in the world of data mesh, data products, and data contracts.

I also include a little pun, because why not? 😅

    (Don’t worry—I hate spam, too, and I’ll NEVER share your email address with anyone!)


    Andrew Jones
    Author
    Andrew Jones
    I build data platforms that reduce risk and drive revenue.