Skip to Content
Tech PrinciplesArchitectureMethodologiesContract-Driven Development

Contract-Driven Development ✍️

Contract-Driven Development (CDD) is a software development methodology that relies on defining formal interfaces and contracts between software components to ensure proper integration. The key principles of CDD are:

  • Define clear interface contracts upfront - All components expose interfaces defined in a shared contract. This enables integration.

  • Design by contract - Modules make guarantees about behavior via contracts. Enables testability.

  • Code generation - Contracts are used to generate models, stubs and tests. Keeps implementations in sync.

  • Contract versioning - Contract owners version contracts and manage change impacts.

  • Language agnostic - CDD does not depend on any particular programming language.

  • Enables team independence - Teams can develop components independently if contracts are followed.

  • Facilitates design reviews - Design Advocates can focus on what matters the most to them.

  • Allows implementation flexibility - Teams can choose their preferred implementation style and stack while satisfying common contracts. A team depending on Java 11 could be code generating with optionals where a cutting-edge team on Java 17 could generate with records or any new addition to the language

Example - OpenAPI

OpenAPI is an API specification format that allows defining interface contracts for RESTful APIs in a language-agnostic way, enabling documentation, code generation, and integration between components.

openapi: 3.1.0 info: title: Sample API version: 1.0.0 paths: /users: get: summary: Returns a list of users responses: 200: description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/User' components: schemas: User: type: object properties: id: type: integer name: type: string email: type: string required: - id - name
Last updated on