The Shift Left Data Manifesto

Mike's Notes

The Shift Left Data Manifesto is written by Chad Sanderson, CEO & Co-Founder of Gable.ai

It is reproduced below. Thoughtful ideas.

Resources

References


Repository

  • Home > Ajabbi Research > Library >
  • Home >

Last Updated

27/03/2025

The Shift Left Data Manifesto

By: Chad Sanderson
Gable.ai Blog: 25/03/2025

Chad Sanderson is the CEO & Co-Founder of Gable.ai

A core idea behind shifting Data Left is simple but often overlooked: data is code. Or more accurately—data is produced by code. It’s not just some downstream artifact that lives in tables and gets piped into dashboards and spreadsheets. Every record, event, or log starts somewhere—created, updated, or deleted by a line of code. And just like DevOps demonstrated, if you want to manage something well, you start at the point of creation.

Data Management for Software Engineering Teams

Hello everyone, my name is Chad Sanderson. I am the author of the blog Data Products and the CEO/Co-Founder of Gable.ai. Over the past few years, I’ve written quite a bit on data management, data quality, and data contracts. In 2024 I spent a little bit less time writing, and more time implementing. I’ve worked with dozens of enterprises during that time span and watched the evolution of data contracts from a nascent idea stemming from a few LinkedIn posts to driving real change for some of the largest companies in the world.

The result of that experience has been I have become a bit of a data extremist. I believe there is a completely new domain of data management over the horizon, one that will altogether change how we think about the discipline, rewrite most/all of our common best practices, and bring the various stakeholders into a cohesive lifecycle of data management. This is a mix of opinions, combined with a description of the cutting-edge - truly game-changing companies that are pioneering how data management is done, oftentimes from unexpected places.

Over the course of this manifesto, I will try to convince you of a few things I strongly believe:

  1. Most engineering teams are federated or becoming so
  2. The way we manage data is designed for centralized environments
  3. Data strategies will almost always fail, due to points 1 and 2
  4. Federated data management is possible, but requires a different approach
  5. That approach has been historically successful in other engineering disciplines

Is this manifesto about data contracts? No. But they do feature prominently. Data contracts are a component of shifting left, among dozens of other components. These components work together to create an entirely new dynamic of data management, completely inverting the processes, tools, strategies, and adoption rates of data quality and data governance. There is so much content to cover, across such a wide variety of topics that I’m splitting the manifesto into two parts for my own sanity. The first section is going to cover where we are today, why I believe the state of data management is fundamentally flawed, why “culture shift” is almost always impossible without technology, and working solutions, and what we can learn from other industries that have solved the same type of problems. Let’s jump into it.

Conway’s Law

Conway’s Law is the observation that organizations tend to design systems that mirror their communication structure. A product designed by a three-person organization will likely have three components. If it is designed by a single team, it will likely all be built within a single large service.

A media company with separate teams for video encoding, recommendation algorithms, and user interfaces might build a streaming platform where these components are loosely coupled, reflecting the team's structure. Hospitals and insurance companies have separate IT systems due to distinct legal and compliance teams. This results in fragmented medical records across different providers, forcing patients to manually transfer records or redo tests.

There are three primary stakeholders in the data management value chain:

  1. Producers: The teams generating the data
  2. Platforms: The teams maintaining the data infrastructure
  3. Consumers: The teams leveraging the data to accomplish tasks

Conway's Law would dictate that the data management, governance, and quality systems implemented in a company will reflect how these various groups work together.

In most businesses, data producers have no idea who their consumers are or why they need the data in the first place. They are unaware of which data is important for AI/BI, nor do they understand what it should look like. Platform teams are rarely informed about how their infrastructure is being leveraged and have little knowledge of the business context surrounding data, while consumers have business context but don't know where the data is coming from or whether or not it's quality.

Is it any wonder that data management programs are a complete, disjointed mess?

The opposite side of the coin of Conway’s Law is the Law of Unintended Consequences Systems, or to summarize - "The purpose of a system is what it does" (POSIWID) – coined by Stafford Beer, a cybernetics researcher. The rule means that what a technology does is more illustrative of what its intended goal is, rather than any stated intent.

For example, suppose data pipelines are consistently breaking and the data is always low quality. In that case, it means the point of your data ecosystem is not to produce high quality trusted data - it is actually to enable teams to move fast, ship without accountability, and tolerate breakages as an acceptable trade-off.

Your data ecosystem is optimized for speed over reliability, manual firefighting over prevention, and short-term fixes over long-term quality. If high-quality data were truly the goal, the system would have built-in schema enforcement, automated validation, and clear ownership—but since those don’t exist (or are routinely bypassed), the real function of the system is to allow chaotic, ad-hoc data handling that prioritizes short-term delivery over long-term trust.

If Conway’s Law helps explain how data got into such a sorry state, POSIWID explains why - the broader organization optimizes for manual effort over proactive, automated, comprehensive solutions.

Federation Ate the World

The early 2000s marked a fundamental shift in how software engineering teams were structured. As technology companies scaled, they recognized that high-quality software required rapid iteration and continuous delivery. Research on software development lifecycles—such as the work popularized in the "Accelerate" book by Forsgren, Humble, and Kim—demonstrated that teams capable of shipping frequently could identify and fix defects faster, improve reliability, and respond to business needs with greater agility. The more frequently features were pushed into production, the sooner feedback loops closed, leading to better user experiences and stronger business outcomes.

To facilitate this velocity, companies embraced Agile methodologies, which dismantled the traditional, slow-moving hierarchical structures and replaced them with small, autonomous, cross-functional teams. Rather than requiring months or years of deliberation, these teams operated with localized decision-making authority, allowing them to experiment, iterate, and ship software much faster. This shift not only optimized for speed but also reduced the coordination overhead that had historically slowed large engineering organizations.

Out of this decentralized model emerged federated engineering structures and the adoption of microservices architectures. Instead of monolithic applications where multiple teams shared responsibility for a single massive codebase, companies transitioned to a world where individual teams owned their services, databases, infrastructure, and deployment pipelines. Each team was empowered to make locally optimal decisions—choosing their own programming languages, data models, and release schedules, all in the name of speed.

The trade-off, however, was that many centralized cost centers—teams and functions designed for a monolithic, tightly controlled architecture—struggled to adapt. Operations teams, for example, were historically responsible for managing deployments in a centralized, controlled manner. With a monolithic system, they could plan releases, monitor performance, and enforce best practices through well-established governance processes. But in a federated world, visibility disappeared. Now, hundreds of teams were shipping thousands of changes independently, overwhelming centralized ops teams who could no longer track, validate, or mitigate risk effectively.

This same dynamic played out in the world of data. Historically, data teams had ownership over the organization’s entire data architecture—curating data models, defining schema governance, and managing a centralized data warehouse. But as engineering teams began making independent decisions about which events to log, what databases to use, and how to structure data, the once-cohesive data ecosystem fragmented overnight.

Without centralized oversight, engineering teams optimized for their immediate needs rather than long-term data quality. Events were collected inconsistently, naming conventions varied wildly, and different teams structured their data models based on what was most convenient for their service, rather than what was best for the organization as a whole. This led to massive data silos, duplicated efforts, and an overall decline in data consistency.

The response from data teams? The Data Lake.

Instead of trying to force governance onto hundreds of independent teams, companies adopted a "dump now, analyze later" approach, instructing engineering teams to send all their raw data into a centralized cold storage repository. This led to the rise of data engineering, a discipline that emerged to clean, transform, and organize this messy, unstructured data into something usable. Data engineers became reactive firefighters, constantly wrangling broken schemas, cleaning up unexpected transformations, and trying to reconstruct meaning from fragmented event logs.

This model was deemed acceptable by business leaders because it allowed engineering teams to move quickly, even though it meant the data team was perpetually stuck in a reactive mode.

In the early days of the cloud, this reactive data engineering model was sufficient. Most organizations primarily used data for dashboarding and reporting, where occasional inconsistencies could be tolerated. But as the industry evolved, the stakes for data reliability grew exponentially.

  • Machine Learning & AI: With AI-driven decision-making, poor data quality no longer just caused bad reports—it directly impacted product functionality and user experience. A mislabeled dataset could lead to a faulty recommendation algorithm, an unreliable fraud detection system, or an inaccurate pricing model.
  • Data as a Revenue-Generating Product: Companies began monetizing data directly—either by selling insights, building customer-facing analytics, or enabling real-time personalization. Inaccurate data now had a direct impact on revenue.
  • Regulatory Compliance & Risk: As GDPR, CCPA, and other data protection regulations took effect, bad data practices became a legal liability. A single oversight—such as failing to properly delete user data upon request—could result in multimillion-dollar fines.

With these shifts, the consequences of reactive data engineering became untenable. Data teams could no longer afford to be downstream janitors, constantly cleaning up after engineering decisions made without governance. Instead, something fundamental had to change.

The federated model of software engineering isn’t going away—if anything, it has only expanded. However, as we’ve seen, the decentralization of engineering cannot come at the cost of operational visibility, data integrity, and compliance. Organizations now face a critical inflection point:

  • How do we reintroduce governance without reintroducing bottlenecks?
  • How do we enable engineering speed while ensuring data correctness and compliance?
  • How do we prevent reactive firefighting and create proactive, self-service data management?

Just as DevOps introduced infrastructure as code to solve the challenges of federated operations, the next era of data engineering must be proactive, automated, and deeply integrated into the software development lifecycle. Federation ate the world. But now we must decide how to rebuild it—this time, with sustainability, accountability, and resilience at its core.

Shifting Left

As the cloud, microservices, and decoupled engineering teams grew the centralized model of cost center management became harder to maintain and justify. The concept of Shifting Left emerged as a mechanism of driving ownership across a decoupled engineering organization and ultimately became the go-to solution for developers. In our context, shifting left is designed to help data teams overcome the people, process, and cultural challenges created by gaps in communication around data management. Instead of data management solely being the responsibility of the downstream data organizations, the treatment of data is a shared responsibility across producers, data platform teams, and consumers.

Simply put: Shifting Left means moving ownership, accountability, quality and governance from reactive downstream teams, to proactive upstream teams.

While Shifting Left may sound too good to be true, this pattern has happened on three notable occasions in software engineering. The first is DevOps, second is DevSecOps, and third is Feature Management.

DevOps first emerged as a concept between 2007-2008 meant to address the growing gaps between IT teams (Dev) and Operations (ops). Before DevOps, software development and IT operations worked in silos. Developers would write code and pass it to operations teams, who were responsible for deployment and maintenance. This led to:

  • Slow releases due to hand-offs and bottlenecks.
  • Frequent deployment failures caused by differences between development and production environments.
  • Blame culture, where development blamed operations for slow deployments, and operations blamed development for unstable code.

With DevOps, IT teams have become more agile, automated, and collaborative. Development and operations now work closely together, using continuous integration and continuous deployment pipelines to automate testing and deployment, reducing human errors and accelerating release cycles. Infrastructure as Code (IaC) allows teams to manage infrastructure programmatically, ensuring consistency and scalability. Monitoring, logging, and observability tools provide real-time insights, enabling proactive issue resolution rather than reactive firefighting.

These days it is incredibly rare to see an engineering organization operating at a meaningful scale without a DevOps function. Most developers in a company are responsible for writing their own unit and integration tests. Teams rally around version control tools like Github and GitLab, both for collaboration, code review, auditing, and more.

Roughly 10 years later in 2015, we saw a similar pattern in DevSecOps. Security teams were reactive -dealing with fraud and hacking after the fact rather than taking proactive and preventative steps to ensure software was designed with security in mind. Like Ops teams, the Security organization was siloed and disconnected from value, and as a cost center, suffered from the same problems as operations.

DevSecOps is more complex than simply integrating security into existing DevOps workflows because it requires security to be automated, continuous, and developer-friendly—something traditional security practices were not designed for. Unlike traditional security, which was often applied as a final step before deployment, DevSecOps embeds security checks throughout the entire software development lifecycle. This shift introduces several challenges:

  • Shift-Left Security Requires Developer Buy-In: Security teams normally operated as gatekeepers, reviewing code and infrastructure late in the process. DevSecOps requires developers to take ownership of security much earlier meaning they need security tools that are easy to use, fast, and integrated into their existing workflows. However, many security tools were designed for security experts, not developers.
  • Balancing Security and Speed: DevOps emphasizes fast, frequent releases, while security traditionally slows things down with rigorous reviews and manual testing. DevSecOps must balance both, requiring automation that can enforce security without blocking deployments. Achieving this requires integrating automated security scanning, policy enforcement, and runtime protection into CI/CD pipelines without causing excessive friction.
  • Automated Security Testing at Scale: Traditional security relied on periodic manual testing (e.g., penetration testing, compliance audits). DevSecOps requires continuous security testing, including:
    • Static Application Security Testing for code vulnerabilities.
    • Software Composition Analysis for third-party dependencies.
    • Dynamic Application Security Testing for runtime security risks.
    • Infrastructure as Code Scanning to prevent misconfiguration.
    • Secrets and Credential Scanning to detect exposed sensitive data.
    • Integrating these into DevOps pipelines without overwhelming teams with false positives is a major challenge.

The overall takeaway? The more complex or multi-component a cost center’s workflows, the more sophistication is required to effectively shift left while managing the delicate balance of developer expectations, speed and accuracy, plus scale.

And finally, the Shift Left has happened with Feature Management. Traditionally, feature rollouts, experiments, and instrumentation were handled late in the development cycle—often by downstream teams like product, analytics, or growth. This led to:

  • Engineers shipping features without proper instrumentation or user tracking.
  • Product teams struggling to get clean data on feature performance post-launch.
  • A/B testing requiring significant engineering support, slowing experimentation velocity.
  • Limited ability to control or roll back features without a full redeploy.

By shifting Feature Management into the software development lifecycle, teams can build observability, experimentation, and rollout controls directly into the feature itself. Feature Flags allow engineers to ship code behind toggles, enabling controlled rollouts and fast reversions without redeployments. Instrumentation and product analytics are now added as part of the development process, not as a follow-up task. And experimentation frameworks are increasingly embedded into the codebase, letting product teams test and iterate without waiting on engineering.

Just as DevOps brought deployment and infrastructure closer to development, Feature Management brings experimentation, rollout control, and measurement upstream—making feature delivery safer, faster, and more data-driven.

All three of these disciplines follow the exact same pattern: A critical business function is siloed downstream (Ops, Security, Product/Growth). By pushing tools and methodologies to the left, it isn’t an incremental change in value, but an inversion of how the job is done. Experimentation becomes something that happens for every new feature deployment by default. Systems are secure by default. While every team is following their own maturity within these paths - many are more sophisticated in shifting left than others - it is not just theory. This has already happened, and we in the data space should stop speaking about what might happen, and more about what can.

Shifting Data Left

Unlike engineering and security, data was the last frontier in cloud migration. While cloud-native infrastructure transformed application development and security in the early 2010s, data teams lagged behind, facing unique and more complex challenges that made cloud adoption far more difficult.

The primary reason for this delay lies in the inherent complexity and multi-faceted nature of data that makes the shift left incredibly complex, costly, and difficult to manage. Security, despite its wide operational scope, primarily deals with permissions, monitoring, and compliance enforcement within a codebase or infrastructure environment. Engineering, too, could migrate by lifting application workloads into cloud-hosted services. The product discipline had the easiest transition, given that front-end/full-stack engineers were already adding monitoring and instrumentation to their services with our without product managers asking for it. However, data does not exist in a single place, nor does it follow a single lifecycle. It moves across repositories, services, and storage technologies, often passing through multiple transformations before it can be used.

A typical data workflow spans:

  1. Source data ingestion (from application databases, logs, APIs, and event streams).
  2. Storage across multiple environments (operational databases, data lakes, warehouses, object storage).
  3. ETL (Extract, Transform, Load) and ELT processes that modify and refine data.
  4. Aggregation into analytical databases or data warehouses.
  5. Further transformations inside the warehouse to clean, normalize, and structure data.
  6. Downstream consumption by dashboards, machine learning models, or data products.

This multi-stage pipeline meant that migrating data to the cloud required far more than simply moving databases—it demanded rebuilding the entire data infrastructure stack from ingestion to transformation, storage, governance, and consumption. The cost, complexity, and dependencies across teams slowed down cloud adoption significantly.

Now, 20 years into the cloud era, data teams are encountering the same organizational and technical bottlenecks that operations teams faced in the mid-2000s. Back then, software engineering moved to a decentralized, service-based model, which broke traditional operations workflows and required a complete rethink of deployment and monitoring strategies. Today, data teams face the same disaggregation problem—modern software development creates silos that fragment data, leading to inefficiencies and bottlenecks that restrict its flow and value within the organization.

In a highly federated engineering environment, individual teams often manage their own databases without centralized coordination, emit event streams without consistent schema or semantic governance, and choose storage solutions optimized for local needs rather than global usability. These teams also tend to create ad hoc transformations that may duplicate or overwrite critical business logic.

The result? Data integrity, consistency, and discoverability suffer. Much like operations before the rise of DevOps, data engineering has become a reactive cost center—constantly fixing inconsistent schemas and data drift, resolving duplicate or contradictory transformations, debugging downstream breakages caused by upstream changes, and responding to compliance incidents like untracked PII exposure.

Just as DevOps emerged to address the chaos of decentralized operations, we now need a similar movement for data—one that rethinks how we approach governance, engineering, and automation. A Shift Left approach to data requires embedding quality, governance, and security at the source, not just patching issues downstream.

This new data paradigm must deliver on several fronts:

  • Schema and contract enforcement at ingestion, to prevent breakages by validating structure at the point of creation.
  • Versioning and change management, applying DevOps principles to schema evolution and business logic to ensure traceability and control.
  • End-to-end lineage tracking, giving teams visibility into how data transforms across systems, helping them understand and reduce the blast radius of change.
  • Automated compliance enforcement, detecting and tagging sensitive data like PII or financial records at the source.
  • Observability and real-time monitoring, to catch anomalies and schema drift before they impact analytics or AI.

Operationally, shifting data left also changes how teams work:

  • Engineering teams must own data quality, just as they own application reliability.
  • Governance must become proactive, driven by automation and policy enforcement, not just documentation.
  • Data contracts should be standardized to reduce fragmentation and ensure consistent expectations across teams.
  • Compliance checks must be embedded into CI/CD pipelines, mirroring how DevSecOps integrates security into the development lifecycle.

The lessons from other shift-left approaches are clear: embedding quality, security, and governance at the source is the only scalable approach. The same applies to data. The future of data engineering is not about building bigger, more sophisticated reactive teams—it is about pushing responsibility upstream, empowering engineering teams, and enforcing quality at the point of data creation.

Much like operations and security before it, data must shift left. Organizations that fail to adapt will face the same problems they always have, except this time the excuses of “its someone else’s problem won’t cut it when the success of a companies AI initiative is on the line.. Those that succeed will transform data into a true production-grade asset, enabling faster decision-making, higher reliability, and greater business value.

Data as Code

A core idea behind shifting Data Left is simple but often overlooked: data is code. Or more accurately—data is produced by code. It’s not just some downstream artifact that lives in tables and gets piped into dashboards and spreadsheets. Every record, event, or log starts somewhere—created, updated, or deleted by a line of code. And just like DevOps demonstrated, if you want to manage something well, you start at the point of creation.

Imagine you're in charge of a machine that produces a high-value product every day. Your job is to ensure quality. If something starts breaking, you don’t sit around analyzing boxes of defective products—you inspect the machine. Code is the machine. It runs on rules, inputs, and constraints that result in some form of data—a CRM entry, an API payload, a Kafka event, a database write. Managing that data means managing the system that generates it.

This is here it’s useful to separate data management into three different but interconnected layers:

  • DevOps is focused on the software development lifecycle—code, pipelines, and deployment.
  • Observability is about the data that’s already been produced—monitoring records, metrics, and aggregates.
  • Business glossaries operate at a higher level—covering domains, policies, compliance, and internal processes.

Each of these layers has value, but they serve different personas and purposes. DevOps is the proactive software engineering layer; observability is the reactive data team layer; business glossaries are organizational scaffolding. If one of these layers is missing, it becomes incredibly difficult to connect the dots.

For example: without data lineage, business processes can’t be tied back to any actual systems or datasets. Without code lineage, your data lineage is blind outside the warehouse—you have no idea where upstream data is coming from or what’s generating it.

This is why data management patterns—catalogs, contracts, lineage, and monitors—shouldn’t be thought of as individual tools. They’re cross-cutting patterns that apply across personas:

  • Engineers need catalogs of code assets, source systems, and event producers.
  • Data teams need catalogs of tables, metrics, and dashboards.
  • Business teams need catalogs of domains, data products, and process workflows.

Same goes for lineage, contracts, and monitors. It’s not enough to do these things in isolation—we need contract enforcement in CI/CD, not just in downstream pipelines. We need code-level lineage, not just column-level lineage. We need contract monitors that can detect schema and semantic breakage as early as possible.

But it’s not just about capabilities—it’s about making sure those capabilities actually work for the right people. Effective data management requires alignment across three key groups: producers, consumers, and business teams. And each of these groups has very different needs.

Before the rise of the modern data stack, we had legacy catalogs—manual systems designed for centralized data stewardship. These catalogs were maintained by data stewards who filled in process docs, definitions, and ownership by hand. That model worked when data governance was owned by a few people and everything moved slowly.

Then modern data catalogs showed up—tools that connected directly to warehouses like Snowflake and Databricks and scanned tables, dashboards, and metrics. They gave data teams a lot more visibility into the artifacts they worked with day-to-day. But they also ran into friction with software engineering teams. The problem? These catalogs weren’t built for engineers. They didn’t expose anything about the code that produces data, the services that emit events, or the systems that control data generation. And when a tool doesn’t map to your responsibilities, it doesn’t get adopted.

Engineers want to understand how the code they own creates data, where that data goes, and what depends on it. They care about breaking changes, contract violations, and runtime errors—but none of that is visible in warehouse-first tooling. A table in Snowflake doesn’t tell you what GitHub repo created it or what line of code owns the transformation logic. So engineers are left in the dark, and downstream teams are left managing the fallout.

To bridge that gap, we need to bring in techniques that have worked elsewhere—DevOps, CI/CD, and even security. Software composition analysis gives us a model for understanding dependencies. Dataflow analysis gives us insight into how code transforms data. CI pipelines can block bad changes before they reach production. Contract tests can catch mismatches between producers and consumers early. The point is: we already know how to solve this in software—we just need to apply those lessons to data.

Until we do, data will remain something engineers generate but don’t own—leaving the rest of the organization to clean up the mess downstream.

The number one question I get is: “Chad, this all sounds great—and conceptually we’re on board—but how? Where do we start?

The answer: find allies on the software engineering team—specifically, those who already think in terms of quality, contracts, and validation. One of the best places to start? QA engineers and automated testing teams. They’re on a shift-left journey of their own, working to push testing and validation closer to the source of truth: the code. They already use a familiar concept—contract testing—to enforce expectations between APIs. This process defines the structure and behavior of communication between systems before runtime. Sound familiar? That’s a data contract.

This concept can—and should—be extended to cover all data ingress and egress points: where data enters a system, and where it leaves. Just like APIs, data systems need contracts at the edges. These contracts should validate everything from schema shape to semantic meaning. But more importantly, they shouldn’t just observe the data after it's been produced—they should observe the code that produces it. We need systems that catch breaking changes at the source, during development, not days later in a downstream dashboard.

A system like that doesn’t just help QA—it scales to every engineer. It defines clear ownership for producers and gives data teams hooks into the creation process instead of chasing quality issues downstream. It embeds data quality inside code quality.

And here’s the mindset shift: most data quality problems are code quality problems. There are really two types.

  1. A lapse in judgment—an engineer skips writing a test and a bug slips through.
  2. A broken dependency—an engineer unknowingly changes something a downstream team relied on.

The second category is where things get interesting. Think of a backend engineer changing an API that silently breaks the frontend. That’s not just a code quality issue—it’s a data quality issue. A schema changed. Expectations weren’t communicated. If engineers adopted data contracts to protect themselves, they’d also protect everyone else: analysts, ML teams, finance reporting, compliance—you name it.

And this approach isn’t limited to traditional pipelines. AI is about to turn this problem up to eleven.

Autonomous agents making code changes might work when isolated to a single codebase. But LLMs struggle with system-wide context—how one service depends on another, how a change in a producer might cascade across APIs, databases, and pipelines. As AI starts making changes across systems, data becomes the medium of communication—not just between humans and machines, but between AIs themselves. And with it comes a combinatorial explosion of data dependencies and breakages. Without contracts and shift-left enforcement, we’ll be flying blind into that complexity.

What Happens When We Get This Right

1. Data teams move upstream

When data quality enforcement happens downstream, data teams are left cleaning up issues they didn’t create and don’t control. But when contracts, lineage, and validation happen at the code level, data teams become active participants in the creation of data—not just its consumers. They can influence modeling decisions, track where data originates, and establish shared accountability with engineering. Instead of writing Slack messages about broken dashboards, they’re writing rules that prevent them from breaking in the first place.

2. Compliance becomes code

Policies don’t scale when they live in wikis or checklists. But they do scale when they’re encoded directly into CI/CD. Contracts as code let organizations define standards—PII tagging, schema validation, retention rules—and then automatically enforce them wherever data is produced. This moves compliance from something reactive and manual to something continuous and automated. No more chasing teams down before audits—violations get caught at the pull request.

3. Engineers get early feedback

Software engineers are used to fast feedback loops. They expect test failures, linting errors, and contract violations to be caught before they merge code—not after something explodes in production. Data should work the same way. If a change to a schema or data payload is going to break an ML model or a reporting pipeline, the engineer should know before they hit merge. That kind of signal creates trust—and makes it easier for engineering to take ownership of data quality.

4. Quality becomes a shared responsibility

Right now, data quality is everyone’s problem and no one’s responsibility. But when data contracts are treated like API contracts, and quality issues are caught in dev, the responsibility naturally shifts to the teams closest to the cause. Engineers own their breakages, data teams own their transformations, and business teams finally get transparency into what’s reliable. Everyone’s incentives align. Quality isn’t something you inspect later—it’s something you build from the start.

5. The language changes

When data issues are framed as code issues, the conversation changes. Engineers don’t have to learn new tools or vocabulary—they just see tests, contracts, and CI checks like they do in the rest of their codebase. And when the language is familiar, adoption skyrockets. Suddenly, “data quality” isn’t a data team problem—it’s a software engineering best practice. This is how data quality becomes something everyone owns—because it's finally framed in a language software teams understand.

Conclusion

You made it to the end. Thanks for the read, I know it was long. This is a subject I’m passionate about, and I believe that shifting left is the key to unlocking such a wide range of solutions and utility to data teams that it is hard to succinctly describe. The impact of this movement, in my opinion, will be equally as impactful on software development as the advent of DevOps. And in the age of AI where data matters more than ever, developing the systems and culture to manage data as code is more critical than ever.

You may have noticed this article was light on details. That was intentional, for my own sanity. In the next article: The Engineering Guide to Shifting Data Left, we’ll get more hands on with real world examples, use cases, and implementations. Take care until then, and good luck.

-Chad

Chad Sanderson
Gable.ai
CEO & Co-Founder

Data Contracts

Mike's Notes

I need to think about data contracts. I have an API Engine (API) to sort out soon, and many data exchanges are also coming up. What should I do?

Data contracts bring data providers and data consumers together.

A data contract is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and its consumers. Think of an API, but for data. A data contract is implemented by a data product or other data technologies, even legacy data warehouses. Data contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.

Below is an article I found on Data Mesh Manager.

Resources

References


Repository

  • Home > Ajabbi Research > Library 

Last Updated

28/03/2025

What is a Data Contract?

Data Mesh Manager:

A data contract defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers. A data contract is implemented by a data product’s output port or other data technologies. Data contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.

Data provider on the left, data consumer on the right, data contract in the middle

Data Contract Example

Let's start with an example to see, what a data contract typically covers:


Screenshot of a data contract in Data Mesh Manager

Before we dive into all the details, let's discuss, how we use data contracts.

Collaboration

Data contracts come into play when data is exchanged between different teams or organizational units, such as in a data mesh architecture. First, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted. They make semantic and quality expectations explicit. They are often created collaboratively in workshops together with data providers and data consumers, even before the data product is implemented. This is what we call contract-first. Later in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.

In a data contract, all attributes of a data model are precisely described and defined with their syntax and semantics. This can be done in the form of technology-neutral way or a technology-specific schema (e.g., SQL DDL, dbt model, Protobuf, JSON Schema), or both. These serve as fixed points for the provider team, which must always be adhered to. But it is also gives flexibility for the providing team, how to design and implement internal components of a data product to fulfill this interface. Consumers can trust that the fields are stable and meet the defined quality standards.

Approval Process

Note

The term data contract does not align with a contract in a legal sense as a mutual agreement between two parties. A data contract specifies the provided data set and is owned by one party, typically the data provider. So, the term data contract may be somewhat misleading, but it is how it is used in practice. The mutual agreement between one data provider and one data consumer is the data usage agreement that refers to a data contract.

The bilateral agreement is reached through an approval process:

A consumer team interested in using the data submits a request to access the data product of another team (provider team). It states the purpose of the intended data usage. The provider team then decides whether to approve the request, based on criteria such as the usage terms, a valid purpose, and need-to-know principle, or whether to need to negotiate anything further with the consumer team. When the request is approved, a data usage agreement is concluded with the data consumer.

A data usage agreement has a life-cycle with a start date, and it can be canceled by either party with respect to a defined notice period. This makes it possible for the provider team to evolve a data product, e.g., when a breaking change needs to be implemented and data consumers are advised to migrate to newer version of an output port within the notice period. Data consumers can also cancel a data product, e.g., when the costs don't meet the expected business value or the data quality is not sufficient. This embraces product-thinking: Data providers need to make sure that their consumers gain value by stable and high-quality data.

Automation and Contract Enforcement

The request flow and lifecycle processes should be fully implemented as a self-service, in line with the data mesh principles. This also includes processes and notifications for new requests, approvals, reassessments, and terminations.

Data contracts and data usage agreements can further act as the foundation to automate processes in the data platform and for computational governance: As soon as a data usage agreement has been approved and within the start date, permissions for the respective data product can be set up automatically in the data platform. When the agreement is terminated, the permissions are revoked.

Data contracts can also be the basis to perform automated tests and quality checks in the CI/CD pipeline or in data quality monitoring tools. For example, a regular check ensures that the schema conforms to the agreed data model and the data meets the defined quality attributes.

Data Contract Specification

For automation, a data contract must be available in a machine-readable form, such as a YAML representation. This is why we propose the Data Contract Specification:

[IMG]

The example from above, encoded as YAML:

dataContractSpecification: 0.9.1
id: urn:datacontract:checkout:snowflake_orders_npii_v2
info:
  title: snowflake_orders_npii_v2
  version: 1.0.0
  description: "All order-created events, PII removed."
  owner: checkout
  contact: {}
terms:
  usage: Max. 10x queries per day
  limitations: Not suitable for real-time use cases
  billing: $1000 / month
  noticePeriod: P3M
models:
  orders:
    type: table
    description: Table containing order information with masked PII.
    fields:
      order_id:
        type: text
        description: Unique identifier for the order.
      customer_id:
        type: text
        description: Unique identifier for the customer.
      email:
        type: text
        description: Masked email address of the customer.
      phone_number:
        type: text
        description: Masked phone number of the customer.
      order_date:
        type: timestamp
        description: Date of the order.
      order_total:
        type: decimal
        description: Total amount of the order.
schema:
  type: sql-ddl
  specification: |-
    CREATE TABLE orders (
        order_id STRING COMMENT 'Unique identifier for the order.',
        customer_id STRING COMMENT 'Unique identifier for the customer.',
        email STRING COMMENT 'Masked email address of the customer.',
        phone_number STRING COMMENT 'Masked phone number of the customer.',
number of the customer.',
        order_date TIMESTAMP_TZ COMMENT 'Date of the order.',
        oder_total DECIMAL COMMENT 'Total amount of the order.'
    );
examples:
- type: csv
  description: Randomly generated values via ChatGPT
  data: |-
order_id,customer_id,email,phone_number,order_date,order_total
    1,101,masked_email_1,masked_phone_1,2023-07-01,100.50
    2,102,masked_email_2,masked_phone_2,2023-07-02,75.25
    3,103,masked_email_3,masked_phone_3,2023-07-03,50.00
    4,104,masked_email_4,masked_phone_4,2023-07-04,200.20
    5,105,masked_email_5,masked_phone_5,2023-07-05,300.75
    6,106,masked_email_6,masked_phone_6,2023-07-06,120.80
    7,107,masked_email_7,masked_phone_7,2023-07-07,50.50
    8,108,masked_email_8,masked_phone_8,2023-07-08,90.00
    9,109,masked_email_9,masked_phone_9,2023-07-09,180.6
10,110,masked_email_10,masked_phone_10,2023-07-10,250.40
quality:
  type: custom
  specification: |-
    quality_checks:
      - name: Check for Null Values
        description: Ensure that there are no missing values in critical columns.
        sql: |
          SELECT *
          FROM orders
          WHERE order_id IS NULL
             OR customer_id IS NULL
             OR email IS NULL
             OR phone_number IS NULL
             OR order_date IS NULL
             OR order_total IS NULL;
      - name: Check for Duplicates
        description: Ensure that each order has a unique identifier, and there are no duplicate entries in the "orders" table.
        sql: |
          SELECT order_id
          FROM orders
          GROUP BY order_id
          HAVING COUNT(*) > 1
      - name: Check for Valid Email Addresses
        description: Ensure that the "email" column contains valid email addresses using a standard email pattern.
        sql: |
          SELECT *
          FROM orders
          WHERE NOT REGEXP_LIKE(email, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}');
      - name: Check for Positive Order Total
        description: Ensure that the "order_total" column contains positive values, indicating valid order amounts.
        sql: |
          SELECT *
          FROM orders
          WHERE order_total < 0;
      - name: Check Order Date Within a Reasonable Range
        description: Ensure that the "order_date" falls within the range from January 1, 2020, to December 31, 2023, to verify the dates are within a reasonable timeframe.
        sql: |
          SELECT *
          FROM orders
          WHERE order_date < '2020-01-01' OR order_date > '2023-12-31';

The example follows the Data Contract Specification that is compatible with Data Mesh Manager's Data Contract API.

The YAML can be read by tools, such as the Data Contract CLI to automate code generation, detect breaking changes in the CI/CD pipeline and to trigger other tools, such as Soda Core Engine to validate quality attributes on the actual data sets.

Visualize the Data Mesh

Data contracts and data usage agreements are also powerful for data discovery and data lineage. You can think of a data mesh architecture as a graph: Data products are the nodes, and data usage agreements represent the edges between data products. With that, the data mesh can be visualized as a map:


The mesh visualized as a map

Such a data map is a way of making the use of data in the company comprehensible and traceable across teams and domains.

Data Mesh Manager

Data contracts need to be managed efficiently and comprehensibly. Many of our customers used a wiki for this purpose, but this quickly reaches its limits and enables hardly any automation.

Since there was no other good tool available for managing data contracts and data usage agreements, we developed Data Mesh Manager, to manage data products, data contracts, and global policies as a web-based self-service. An event-based API enables seamless integration with any data platform. And any change will be recorded in an audit trail.


Screenshot of a data contract in Data Mesh Manager

In addition to a data product inventory for finding and evaluating data products, the Data Mesh Manager also supports a request and accept flow for creating data usage agreements, as well as an event-based API for automatically creating and revoking permissions in the data platform. The visualization as a data map makes the mesh comprehensive and the use of the data products traceable.

Building High-Performing Innovation Teams: Commitment vs. Consensus

Mike's Notes

Jeremiah Gardner on commitment vs consensus. I have seen the problem he is describing many times.

Resources

References


Repository

  • Home > Handbook > Teams

Last Updated

26/03/2025

Building High-Performing Innovation Teams: Commitment vs. Consensus

By: Jeremiah Gardner
jeremiahgardner.com: 26/03/2025

Let's be honest about something – working on an innovation team is hard. Really hard.

Anyone telling you differently is either selling something or hasn't actually done it.

Here's why: Not only are you trying to find answers to questions nobody's asked before (that's challenge number one), but you're doing it with a group of humans who each bring their own perspectives, biases, and ways of working. That's your one-two punch right there.

And what do most teams do when faced with this complexity? They chase consensus like it's the holy grail of innovation.

You know how it goes. The endless meetings. The careful tiptoeing around disagreements. The diplomatic dance of making sure everyone feels heard. The desperate pursuit of harmony at all costs.

Sounds nice, right? Almost utopian.

But here's the thing – while we're all sitting in our comfy meeting rooms, nodding along and "building consensus," something critical is happening: absolutely nothing.

Let me paint you a picture of what consensus actually looks like in practice:

Three-hour meetings that could've been 30-minute decisions

"Let's circle back" becoming your team's unofficial motto

Death by a thousand tiny compromises

That gnawing feeling that you're moving at the speed of bureaucracy

Meanwhile, your customers – you know, the people you're supposedly innovating for – are out there, waiting for solutions while you're debating the finer points of your project timeline in meeting room B.

This is where great innovation teams zag while others zig. They understand a fundamental truth:

Consensus is the enemy of progress. Commitment is the ally of innovation.

What do I mean by commitment? It's not about blind agreement or hierarchical mandate. It's about:

  • Crystal clear priorities that everyone understands
  • Quick, informed decisions that keep momentum alive
  • Forward movement without the paralysis of second-guessing
  • Actual accountability (yes, with real names attached to real tasks)

I've seen this play out countless times in my work with Fortune 500 innovation teams. The most successful ones aren't the ones with perfect harmony – they're the ones who've mastered the art of commitment.

Take Netflix's approach to innovation teams. They famously operate on what they call "informed captains" – team leaders who are expected to make clear decisions after gathering input, rather than seeking consensus. As former Netflix executive Patty McCord puts it, "Good teams don't wait for consensus. They listen, debate, and then commit to a course of action."

Want to shift your team from consensus-seeking to commitment-driving? Start with these four questions in your next meeting:

  • "What specifically do we need to learn next?"
  • "How exactly will we learn it?"
  • "Who's taking point on this?" (Yes, actual names)
  • "When do we regroup to share learnings?"
  • Then – and this is crucial – get out of the building and go learn something from your actual customers.

Remember: Innovation isn't a committee sport. It's a commitment game. The teams that win aren't the ones who agree on everything – they're the ones who commit to learning fast and moving forward together.

Ready to ditch consensus and embrace commitment? Your customers are waiting.

HTTP 2 vs HTTP 3 — What's the Difference?

Mike's Notes

Useful background information.

Resources

References


Repository

  • Home > Ajabbi Research > Library > Subscriptions > Level Up Coding

Last Updated

23/03/2025

HTTP 2 vs HTTP 3 — What's the Difference?

By: Nikky Siapno
Level Up Coding: 23/03/2025

HTTP 1 started in 1996. The very next year HTTP 1.1 followed. It was another ~20 years until HTTP 2 became standardized in 2015. And in recent years (2022), HTTP 3 was officially standardized.

But what’s the difference?

Starting at the foundation:

HTTP 1.1:

  • Persistent connections — Reuses connections instead of opening new ones
  • Chunked transfers — Sends data in parts instead of waiting for the full response
  • Improved caching — Introduced headers for better caching and connection management
  • Sequential requests — Requests block each other (HoL blocking at the request level)
  • Multiple connections needed — Browsers used multiple TCP connections for speed
  • It introduced core features still used today.

HTTP 2:

  • Multiplexing — Multiple requests in a single TCP connection
  • Header compression (HPACK) — Reduces metadata size
  • Stream prioritization — Ensures critical resources load first
  • Head-of-line (HoL) blocking — A lost packet blocks all streams
  • While HTTP 2 optimized TCP, it remained constrained by TCP’s head-of-line blocking.

HTTP 3:

  • Built on QUIC (UDP) — No more TCP bottlenecks
  • Independent streams — Packet loss in one stream doesn’t affect others
  • Faster handshakes — Combines transport + encryption setup in one step
  • Mandatory encryption (TLS 1.3) — Security by default
  • Connection migration — Seamless across network changes

In a nutshell: HTTP 2 optimized TCP, but HTTP 3 rewrites the game with QUIC, making it faster, more reliable, and encrypted by default.

Which fact surprised you?

How Does SQL Execution Order Work, and Why is it so Important?

Mike's Notes

Level Up Coding is a great visual reference.

Resources

References


Repository

  • Home > Ajabbi Research > Library > Subscriptions > Level Up Coding

Last Updated

22/03/2025

How Does SQL Execution Order Work, and Why is it so Important? 

By: Nikki Siapno
Level Up Coding: 02/03/2025

A SQL query executes its statements in the following order:

  • FROM / JOIN
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • DISTINCT
  • ORDER BY
  • LIMIT / OFFSET

The techniques you implement at each step help speed up the following steps. This is why it's important to know their execution order. To maximize efficiency, focus on optimizing the steps earlier in the query.

With that in mind, let's take a look at some optimization tips:

1) Maximise the WHERE clause

This clause I executed early, so it's a good opportunity to reduce the size of your data set before the rest of the query is processed.

2) Filter your rows before a JOIN

Although the FROM/JOIN occurs first, you can still limit the rows. To limit the number of rows you are joining, use a subquery in the FROM statement instead of a table.

3) Use WHERE over HAVING

The HAVING clause is executed after WHERE & GROUP BY. This means you're better off moving any appropriate conditions to the WHERE clause when you can.

4) Don't confuse LIMIT, OFFSET, and DISTINCT for optimization techniques

It's easy to assume that these would boost performance by minimizing the data set, but this isn’t the case. Because they occur at the end of the query, they make little to no impact on its performance.

If you want to create efficient queries, it's a good idea to understand how things work under the hood otherwise your efforts may be wasted. While these tips work best in most cases, you should consider your unique use case when choosing the best course of action.

I broke the CMS

Mike's Notes

The best way to learn is to make mistakes. Oops.

Resources

References


Repository

  • Home > PipiWiki > Engines

Last Updated

24/03/2025

I broke the CMS

By: Mike Peters
On a Sandy Beach: 21/03/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

The integration experiment running live data through the Plug-in Engine (plu) and Learning Object Engine (lob) with the Content Management Engine (cms) didn't work.

It led me to discover a previously hidden issue with the CMS data model, which yesterday led to the model's change and the CMS's now-broken state.

To get the CMS working again, a lot of code must be revised. The Template Engine (tem) and the Render Engine (rnd) will also need minor altering.

However, with these complex changes, the integration to enable plug-ins and learning objects should now work in future.

I have been using a temporary workaround to successfully work with all 3 engines.

Plug-ins are necessary for two current projects;

  • my first customer needs live-sign language interpreters via Relay (a video service) embedded on their static website
  • Embedding Wolfram Notebooks on Pipi documentation pages
Learning objects are necessary for these tasks on the roadmap;
  • User documentation
  • the UI help system
I also realised that adding plug-ins and learning objects is not on the published roadmap. A job that is now done. (Roadmap wbs 4.1 - 4.5)

Nikolai Vavilov and the Living Library of Resilience: The Story of the World’s First Seed Bank and the Tragic Hero of Science Who Set Out to End Humanity’s Suffering

Mike's Notes

Maria Popova tells a moving story about Nikolai Vavilov, one of humanity's heroes. If you understand his motivations, you will understand the why behind Ajabbi.

Resources

References


Repository

  • Home > Ajabbi Research  > Library > Subscriptions > The Marginalian

Last Updated

20/03/2025

Nikolai Vavilov and the Living Library of Resilience: The Story of the World’s First Seed Bank and the Tragic Hero of Science Who Set Out to End Humanity’s Suffering

By: Maria Popova
The Marginalian: 8/03/2023

I spent large swaths of my childhood by my grandmother’s side in rural Bulgaria as she tended to her subsistence garden, tilling and planting, watering and weeding. Each August, we did something that felt to me like partaking of magic — we would choose the sweetest, most succulent tomatoes from the vine, cut them open, carefully extract the seeds, and lay them out on newspaper to dry, knowing that they would become next spring’s seedlings and, with nothing more than sunlight and water, next summer’s bright red orbs of delight. So it is that, year after year, my grandmother refined her tomatoes into a cornucopia of unparalleled sweetness and perfection. Last summer’s seeds are already growing as I write.

This magic was made possible by a visionary of science who set out to save humanity and died for his values the year my grandmother turned nine.


Tomato, or Love-Apple, from Elizabeth Blackwell’s pioneering 1737 encyclopedia of medicinal plants. (Available as a print, benefitting The Nature Conservancy.)

While the physicist Sergei Vavilov was presiding over Stalin’s Academy of Sciences and spearheading the Soviet atomic bomb project, his idealistic older brother was laboring at something of orthogonal impact on humanity — a way to end an elemental form of suffering that has haunted our species since its dawn.

The botanist, geneticist, and explorer Nikolai Vavilov (November 25, 1887–January 26, 1943) was still a boy when he arrived at his dream of ending famine. He had heard his father’s stories of growing up in poverty and constant hunger due to crop failures. When Nikolai himself was four, the early arrival of winter decimated crops all over the country, sending millions into starvation. All the tsar could do was offer his subjects “famine bread” — loaves made of milled husks, bark, weeds, and moss, rationed out in the freezing cold. Vavilov’s father had spent his life rising from poverty and now had a comfortable life as a merchant, so the family was protected from the worst of the famine — but from his precarious island of comfort, the boy watched the ocean of suffering and sorrowed. Half a million peasants perished that winter as the aristocracy feasted on imported delicacies from Europe — grim structural inequality that became the ignition spark for the long-seething people’s revolution a quarter century later.

Vavilov saw the contours of a different kind of revolution — one no one else could envision, not in Russia and not anywhere in the world.


Nikolai Vavilov

He wrote in the diary of his youth:

Do what you can. If you can’t do something you wanted to do, then you will be forgiven, but if you don’t want to try to do anything, you will not be forgiven.

He decided to do nothing less than end the world’s hunger, vowing in his diary to devote his life to science — an endeavor aimed at “everything that brings joy, calmness of emotion and reason” — so that he may “understanding nature for the betterment of humankind.”

After graduating from the Soviet agricultural academy as a botanist, he set out to travel through Europe and absorb all he could from the best scientists in every related discipline. In England, he worked with William Bateson, who had coined the word genetics to explain heredity and had pioneered the study of this script for transmitting the message of life.

Upon returning to Russia, Vavilov founded an institute under which to commence the great project of his life — collaborating with nature on enhancing her strengths and allaying her weaknesses by using the new science of genetics to cultivate plant species that would thrive in conditions none had survived before. He had a revolutionary insight: There must be wild varieties of common agricultural plants with different genes that make them more resilient than their farmed cousins — genes that could be used to strengthen agricultural crops by breeding stronger species that would feed humanity even through droughts and freezes. He called them his miracle plants. It wasn’t just an idealist’s dream — he knew the science that would make it a reality, and he would devote his life to it.

When World War I broke out, Vavilov, already established as a preeminent botanist, was dispatched to present-day Iran to solve a mystery — Soviet soldiers there were suffering from brain fog and inexplicable dizziness. He discovered that the mysterious malady was caused by a fungus growing on the wheat of which their bread was made. As bullets flew around him, Vavilov carefully collected samples of local plants, wrapped them in wax paper, and tucked them into his breast pocket. He didn’t yet know it, but this was the birth of Earth’s largest botanical collection.


The pea by French artist Paul Sougy. (Available as a print, benefitting The Nature Conservancy.)

When a drought lashed Russia in 1921 and killed the harvest, more than 5 million people died of starvation in a year, most of them peasants. Vavilov grew determined to never let this happen to anyone again. He understood that if he could equip farmers with the basic science of genetics, they could control for which traits of their crops would dominate, rather than entrusting their harvest to the roulette of chance — they could do what my grandmother did with her tomatoes, selecting for the best traits year over year. Mendel had made a science of agriculture by expressing mathematically the probabilities of genetic variance. Vavilov set out to make of that science an art of resilience, having vowed as a young man to “work for the benefit of the poor, the enslaved class of my country, to raise their level of knowledge.”

He spent the 1920s roaming the world to collect wild varieties of staple foods. He slept little, smiled much, and trekked through the jungle in his tailored three-piece suit, tie, and felt fedora. He traveled to places frequented by droughts and food shortages, from Africa to the Middle East, taking care to learn the language and talk to locals about their lore of growing food in inhospitable conditions. He traveled to the birthplaces of the most nutritious plants. In Brazil, he got cacao, oranges, mangoes, and papayas. In China, poppy and sugarcane. In Korea, soybeans and rice. In Ethiopia, he discovered the mother plant from which all the world’s coffee originated.


Cacao by Étienne Denisse from his Flore d’Amérique, 1846. (Available as a print, a cutting board, and stationery cards, benefitting The Nature Conservancy.)

By the end of the decade, Vavilov had completed numerous ethnobotanical expeditions to collect hundreds of thousands of seeds from five continents, including many places where no scientist had set foot before. He was quietly building something unexampled: the world’s first seed bank — a living library of biodiversity that would come to the rescue of the people of any land whose crops were decimated by a drought or a blight. There were 600 kinds of apples and more than a thousand varieties of strawberries among its quarter million plants — a lush repository of resilience, housed at Vavilov’s institute in Leningrad.

Lenin, who had assumed power in the 1917 Russian Revolution, had immediately recognized the political value of Vavilov’s humanistic work — its insurance against the country’s crop failures, its promise of making Russia a superpower of global food production — and had thrown his full support behind it. But when he died in 1924, everything changed.

As Stalin usurped power, he forced peasant farmers off their farms and into large industrial agriculture collectives — tumult that disrupted the harvest and hurled the country into mass starvation. He knew that a widespread famine would hamper his revolution; he knew that more resilient crops would be the solution. But it was not Vavilov’s science he turned to.

On August 7, 1927, Pravda — the newspaper voice of the Communist Party — published a fawning profile of a young “barefoot scientist” in rural Azerbaijan who had never gone to university but was promising an agrarian revolution.

Trofim Lysenko considered scientific education “harmful nonsense.” He rejected Darwinian evolution and Mendelian genetics, instead subscribing to Lamarckian inheritance with its outlandish claim that organisms acquire traits in immediate response to their environments and pass those traits immediately to the next generation — a pseudoscience that fueled the menace of eugenics. There were echoes of alchemy in Lysenko’s bravado — he promised he could cultivate wheat that would turn into rye and rye that would turn into barley. He bragged that his pea crop had withstood winter thanks to an innovative “training” strategy — soaking the seeds in ice-cold water, which he called vernalization. He claimed he could “train” plants within a single generation, making the very next generation more resilient.


Trofim Lysenko measuring wheat

Stalin, having no understanding of science, was blinded by the luster of the young man’s instant gratification claims. So began the greatest anti-science campaign of the twentieth century.

The dictator, who declared 1929 the year of the “Great Break with the Past,” gave Vavilov an ultimatum: he had to breed his miracle plants in three years, or face grave consequences. It was a biological impossibility; in reality — the evolutionary reality of reproductive cycles and genetic development — it would take at least four times as long for new genetic traits to manifest in a species on the scale of a crop. Seizing upon his spotlight moment and his nascent promotion within Stalin’s scientific establishment, Lysenko launched a concerted attack on Vavilov’s research, pitting it against his own “science” as too slow for the urgently needed famine relief in the country, too humble for the economic domination Stalin craved. He did not hesitate to falsify his own research to bolster its claims.

Vavilov had spent years laboring to bring the seventh International Congress of Genetics to the USSR and although it had been initially approved by the government, now the Communist Party abruptly cancelled the global gathering. When it was eventually convened in Edinburgh after a two-year delay and Vavilov was banned from attending, his international colleagues placed an empty chair on the stage to protest his absence — he was already one of the most respected geneticists in the world.

With science itself under assault, Vavilov devoted all of his energies to his institute and the seed bank, vowing:

We shall go into the pyre, we shall burn, but we shall not retreat from our convictions.

When his plants developed in accordance with nature and failed to meet the dictator’s timeline, Vavilov was accused of treason and sabotage. In the middle of a field expedition in the Ukraine, he was arrested as “an active participant of an anti-Soviet wreckage organization and a spy for foreign intelligence services.” His home was raided and all of his field notes destroyed, but his colleagues managed to save his voluminous correspondence with other scientists and his manuscripts, tucking them away in the basement of the institute, beneath the seed bank.


Nikolai Vavilov’s arrest photo

Upon receiving news of the arrest, Vavilov’s brother wrote in his diary:

His big useful life is being ruined… life of tireless and intense work for his homeland, for the people. All his life spent in work, with no other hobbies. Wasn’t it obvious and clear to everybody? What else can be asked and demanded of individuals? This is a cruel mistake and an injustice. It is even more cruel because it is worse than death. The end of scientific work, the slander, ruining the lives of family members, the threat of it all.

Over the next eleven months in jail, Vavilov was interrogated and tortured hundreds of times, sometimes for thirteen hours a time, for a total of 1,700 hours, with the intention of coercing a confession of sabotage and espionage. He remained adamant that his research had been only in the service of science and human welfare.

Like Dostoyevsky, he was sentenced to death by firing squad, but his death sentence was repealed and reduced to twenty years in a prison camp.

This was an epoch of sweeping terror. While Stalin was terrorizing scientists, Hitler was savaging Europe. Leningrad was next on his conquest list — not only because of its geopolitical advantages as a major international port, but because it housed something precious: the seed bank. The Führer well understood that controlling the world’s food supply was key to controlling the world’s population, so he tasked a special SS unit with looting Vavilov’s seed collections.

On September 8, 1941, the Nazis began their assault on Leningrad by severing the last road to the city. The siege would last 872 days as Leningrad refused to surrender. Food ran out fast. By the winter of 1942, all the government could provide was a ration of two slices of bread, made of 50% sawdust. This too ran out. People took to stripping the wallpaper in their apartments, scraping the adhesive paste made of flour and water, and boiling it to make soup. Death swept the city — 800,000 human beings, one out of every three citizens. Bodies lined the streets unburied. Rats emerged by the millions, feasting on the corpses.

At Vavilov’s institute, scientists barricaded themselves to protect the seed bank from the rats and the Nazis. Famished themselves, they took turns staying up all night, warding off the rodents with metal rods. In what may be the most moving sacrifice in the history of science, nine scientists died of starvation, guarding a cornucopia of nuts, beans, rice, and grains. The curator of legumes was found at his desk, an envelope of peas by his side.

The vault survived unharmed, holding the seeds of life.


Clitoria, or butterfly pea. (Available as a print, a cutting board, and stationery cards, benefitting The Nature Conservancy.)

Meanwhile, Vavilov was languishing in prison. Inmates were fed nothing but flour and frozen cabbage. He survived for two years, his vivacious body shrinking to a skeleton. And then, biology gave way to entropy. In the icy Russian winter of 1943, Nikolai Vavilov died of starvation — the selfsame terror he had devoted his life to preventing. His body was dumped in an unmarked mass grave.

He had once written to a friend:

I really believe deeply in science; it is my life and the purpose of my life. I do not hesitate to give my life even for the smallest bit of science.

Like Alan Turing, Nikolai Vavilov was posthumously pardoned by a new government and eventually celebrated as a hero of science. A Russian postage stamp bears his image and the Russian Academy of Sciences awards a prestigious medal in his honor. A small planet discovered by a Soviet astronomer is named after him, as is a crater on the far side of the Moon. A monument of him rises from a plaza near the prison where he died — a site of frequent resistance protests to this day. The Vavilov Institute of Plant Industry in St. Petersburg is still home to one of the world’s largest seed banks and was the inspiration for the creation of the Svalbard Global Seed Bank near the North Pole in 2008.

When the next global famine savages our species, Vavilov’s legacy will be a lifeline, purchased with his life.

Learning object integration with CMS

Mike's Notes

I made a breakthrough on integrating the CMS and Learning Objects.

Resources

References


Repository

  • Home > Ajabbi Research > Library > Software > Architecture > Learning Object
  • Home > Ajabbi Research > Source > SCORM

Last Updated

19/03/2025

Learning object integration with CMS

By: Mike Peters
On a Sandy Beach: 11/05/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

Yesterday, I finally figured out how to integrate the new Learning Object Engine (lob) with the existing Content Management System Engine (cms). One problem was dealing with these four levels.

  • Simple chunk
  • lesson
  • course
  • set of courses.

I found a solution by examining how a Learning Management System (LMS) created by Brisbane University in 1996 was built around objects and pages. It predates SCORM and has some valuable features.

Now, the interchange with SCORM works, and the CMS creates web pages with learning object types.

The other problem was how to incorporate the Diataxis framework.

"The Diátaxis approach divides documentation into four distinct content types:

  • Tutorials - Lessons that provide a learning experience, taking users step-by-step through hands-on exercises to build skills and familiarity.
  • How-To Guides - Practical guides focused on providing the steps to solve real-world problems.
  • Reference - Technical descriptions and factual information about the system, APIs, parameters, etc.
  • Explanation - Background information and conceptual discussions that provide context and illuminate topics more broadly.

The key premise of Diátaxis is that each content type serves a different user need and has a distinct purpose. Keeping them separated allows the content to be tailored and structured appropriately for that specific goal." - I'd rather be writing.

I created a set of rule combinations that included Diataxis, from which one could be selected. These can drive a Workflow Engine (wfl).

Workflow Example

Select Website > Select Tutorial Section > Create lesson > Save > Create simple chunk > Create content > Save > Post

Testing

The next step is to run test content through both engines and see what happens.