---
title: "Fixed price vs time and materials"
canonical: https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/
language: en
description: "Fixed price wins when the scope is well understood, usually after a discovery phase, and you want a signed commitment to deliver it. Time and materials, billed …"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

Choosing how to buy

# Fixed price vs time and materials: which contract fits your software project?

Fixed price wins when the scope is well understood, usually after a discovery phase, and you want a signed commitment to deliver it. Time and materials, billed as a weekly retainer, wins when the scope is still moving and you want to steer week to week. The honest answer is that most projects use both: a fixed-price build once discovery has nailed the scope, or a retainer while the unknowns are still being resolved. Pick the model that matches how certain your scope actually is, not the one that feels safest on paper.

Short answer

Use fixed price when scope is locked and you want a binding commitment to deliver it; use a weekly retainer when scope is still evolving and you need to steer as you go.

Best for

- Fixed price: a clearly scoped build after discovery
- Fixed price: budget approval that needs one firm number
- Retainer: early-stage products where scope is still forming
- Retainer: ongoing work where priorities shift week to week
- Retainer: teams that want to start before everything is defined

Not for

- Fixed price: projects where you cannot yet describe the scope
- Fixed price: founders who expect to change direction mid-build
- Retainer: buyers who need a single guaranteed number up front
- Retainer: stakeholders who cannot review progress weekly

// 01

## Compare the options

How the two models differ where it actually matters.

| Dimension | Fixed price (Werkvertrag) | Time and materials (retainer) |
| --- | --- | --- |
| Scope certainty needed | High. The scope must be defined before signing. | Low. Scope can stay open and evolve. |
| Who carries the risk | Wavect. We are legally bound to deliver the agreed scope. | Shared. You pay for the time, we deliver against priorities. |
| Handling changes | Change request and re-quote against the signed SoW. | Re-prioritise the next week. No paperwork. |
| Best stage | After discovery, when the build is well understood. | Early or exploratory work, or long-running iteration. |
| Cancellation | Bound to the agreed deliverable in the SoW. | Cancel any week. The last week is refunded if not earned. |
| What you optimise for | Certainty of price and delivery. | Flexibility and speed to start. |

// 02

## Where Wavect lands on this

We are not religious about either model. We are religious about matching the contract to how much you actually know.

If discovery has produced a clear scope, fixed price is the honest choice. We sign a Werkvertrag, a Statement of Work that legally binds us to deliver what it describes. That puts the delivery risk on us, where it belongs once the scope is agreed.

If the scope is still forming, a fixed price would be a guess dressed up as a guarantee. There we run a weekly retainer instead. You can cancel any week, and the last week is refunded if we did not earn it. That keeps us honest week to week instead of hiding behind a number nobody could stand behind.

// 03

## Cost, risk and timeline

Cost Discovery from EUR 3,500 Discovery defines the scope that a fixed price can then be quoted against.

Risk Sits with the chosen model Fixed price puts delivery risk on us; a retainer keeps it shared and visible.

Timeline Set by scope clarity A locked scope can be scheduled firmly; an open scope is steered weekly.

// 04

## Where this usually goes wrong

- Signing a fixed price before the scope is understood, then fighting over every change request.
- Treating a retainer as open-ended with no weekly review, so spend drifts without output.
- Confusing a fixed-price deliverable guarantee with a deadline refund. They are different things.
- Picking fixed price purely to cap budget, then underspecifying the SoW so the build misses the real need.
- Running a retainer with stakeholders who cannot make decisions weekly, which stalls the work.

// 05

## The checklist

Before you choose a contract model, confirm these.

- You can describe the scope in enough detail to quote it, or you accept that you cannot yet.
- You know who carries delivery risk under the model you picked.
- For fixed price, the SoW lists deliverables, not just intentions.
- For a retainer, you have someone who can prioritise every week.
- Your budget approval matches the model: one number, or a weekly rate.
- You understand fixed price is a delivery commitment, not a deadline refund.
- You have a path to convert from retainer to fixed price once scope settles.

// 06

## What this looks like in our work

Where the right model and a tight scope moved fast.

### [Twinsoft AI](/case-studies/twinsoft-ai/)
- **Status:** Live
- **Outcome:** 2 weeks - To Sellable MVP
- **Summary:** Took a vibe-coded prototype to enterprise pilot-ready, no shortcuts.
- **Stack:** Python / Flask, LLMs, Terraform

### [PromptID](/case-studies/promptid/)
- **Status:** Live
- **Outcome:** 6 weeks - 0 to Production
- **Summary:** AI-native assessment platform, 0→production in 6 weeks under compressed market pressure.
- **Stack:** NestJS, NextJS, LangChain

These are selected projects, not our full portfolio. We have shipped 75+ products since 2018.

// 07

## When this fits, and when it does not

// 01

### When Wavect is the right fit

- You want a partner who tells you which model fits, not one who defaults to whatever bills more.
- You have run, or are willing to run, a discovery before locking a fixed price.
- You want delivery risk carried by the people building the software.
- You value a contract that matches reality over one that looks tidy.

// 02

### When we are not the fit

- You want a guaranteed price for a scope you cannot yet describe.
- You expect a fixed-price contract to refund you if a date slips.
- You will not engage weekly on a retainer but also will not define scope.
- You are shopping purely on the lowest headline number.

Not sure which model fits your project? Start with discovery and the right contract becomes obvious.

// 08

## Related services & reading

- [SERVICE Software Development](/services/software-development/)
- [SERVICE MVP Development](/services/mvp-development/)
- [SERVICE Fractional CTO](/services/fractional-cto/)
- [GUIDE What is a software discovery phase?](/software-development-guide/what-is-a-discovery-phase/)
- [GUIDE What software development costs in Austria](/software-development-guide/software-development-cost-austria/)
- [GUIDE How to choose a software agency](/software-development-guide/how-to-choose-a-software-agency/)
- [CASE STUDY Twinsoft AI: prototype to enterprise pilot in 2 weeks](/case-studies/twinsoft-ai/)
- [CASE STUDY PromptID: 0 to production in 6 weeks](/case-studies/promptid/)

// 09

## FAQs

### Is fixed price always safer than time and materials?

No. Fixed price is only safe when the scope is well understood. If you fix a price on a vague scope, you trade real risk for arguments over change requests. When scope is uncertain, a weekly retainer is the more honest choice.

### What exactly is a Werkvertrag?

It is a signed Statement of Work that legally binds us to deliver the scope it describes. The delivery risk sits with us. It is not a promise to refund you if a deadline moves; it is a commitment to deliver the agreed result.

### Can I cancel a weekly retainer?

Yes. You can cancel any week. If the last week was not earned, it is refunded. That is the trade-off for the flexibility a retainer gives you.

### Can we switch from a retainer to fixed price later?

Often that is the best path. Run a retainer or a discovery while scope is uncertain, then lock a fixed-price Werkvertrag once the build is well defined.

### How do I keep a fixed price honest?

Define the scope properly before signing, usually through discovery, and make sure the SoW lists concrete deliverables rather than intentions. A fixed price is only as good as the scope behind it.

Last reviewed: 2026-06-26 by [Kevin Riedl](/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-06-26",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-06-26",
      "url": "https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/#article",
      "@type": "Article",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-06-26",
      "datePublished": "2026-06-26",
      "description": "Fixed price wins when the scope is well understood, usually after a discovery phase, and you want a signed commitment to deliver it. Time and materials, billed as a weekly retainer, wins when the scope is still moving and you want to steer week to week. The honest answer is that most projects use both: a fixed-price build once discovery has nailed the scope, or a retainer while the unknowns are still being resolved. Pick the model that matches how certain your scope actually is, not the one that feels safest on paper.",
      "headline": "Fixed price vs time and materials: which contract fits your software project?",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-06-26",
      "mainEntityOfPage": "https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/#webpage",
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        {
          "@type": "Service",
          "name": "Software Development",
          "url": "https://wavect.io/services/software-development/"
        },
        {
          "@type": "Service",
          "name": "MVP Development",
          "url": "https://wavect.io/services/mvp-development/"
        },
        {
          "@type": "Service",
          "name": "Fractional CTO",
          "url": "https://wavect.io/services/fractional-cto/"
        }
      ],
      "name": "Fixed price vs time and materials: which contract fits your software project?",
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "reviewedBy": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".cmp-hero__headline",
          ".cmp-hero__lead"
        ]
      },
      "url": "https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/",
          "name": "Home",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/software-development-guide/",
          "name": "Software development guide",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/software-development-guide/fixed-price-vs-time-and-materials/",
          "name": "Fixed price vs time and materials: which contract fits your software project?",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Fixed price is only safe when the scope is well understood. If you fix a price on a vague scope, you trade real risk for arguments over change requests. When scope is uncertain, a weekly retainer is the more honest choice."
      },
      "name": "Is fixed price always safer than time and materials?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It is a signed Statement of Work that legally binds us to deliver the scope it describes. The delivery risk sits with us. It is not a promise to refund you if a deadline moves; it is a commitment to deliver the agreed result."
      },
      "name": "What exactly is a Werkvertrag?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. You can cancel any week. If the last week was not earned, it is refunded. That is the trade-off for the flexibility a retainer gives you."
      },
      "name": "Can I cancel a weekly retainer?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Often that is the best path. Run a retainer or a discovery while scope is uncertain, then lock a fixed-price Werkvertrag once the build is well defined."
      },
      "name": "Can we switch from a retainer to fixed price later?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Define the scope properly before signing, usually through discovery, and make sure the SoW lists concrete deliverables rather than intentions. A fixed price is only as good as the scope behind it."
      },
      "name": "How do I keep a fixed price honest?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
