Fix-Price Projects And Agile

PyCon 7, 2016

live slides @

Peter Bittner

  • Developer (of people, companies, code)
  • Co-founder Painless Software
  • @peterbittner,






You Know That Well




still missing




bugs, bugs, bugs


customer complaints


(price pressure)

unpaid fixes


Who's Guilty?

#1  Incompetent developers

#2  Customer (feature changes)

#3  "Agile" doesn't work

#4  Maybe it has to be that way?

Agile does not exist.

-- the infamous Peter Bittner

It's really not a method, but just a set of best practices derived from experience (in software development)


  • Why fix-price projects?
  • 3 dimensions of a project
  • (Failing) Classic approach I+II
  • (Demanding) Successful approach

A) Sales Process

B) Project Execution

Why Fix-Price Projects?

  • It's a planned economy (annual plan)
  • Budget known in advance
  • Target dates depend on goals + budget
  • Revenue expected from new features
  • Sums up to total profit

Reliable dimensions

Estimated dimensions

3 Dimensions of a Project

1.  Time

2.  Budget

3.  Features

Failing projects nail all 3 of them.

(Failing) Classic Approach

  • All features + fixed deadline + fixed budget
  • Must be estimated competitively
  • Buffers are never sufficient
  • Not ready for change = renegotiations

You try to do the impossible.

(Failing) Classic Approach II

  • They will buy it (low risk)
  • Time to get to know them
  • Place to sell your approach
  • Room to come up with an estimation

Offer a workshop

You try to do it all

  • Your goal: rough estimation
  • Because you want all features (too)
  • And meet budget + time
  • "I told you at the workshop" syndrome



Successful Approach

  • Fix deadline + budget
  • Total estimation = non-binding ("plausibility check")
  • Explain advantages of sprint-wise billing

Sprint-wise billing

  • Reduce risk (always deliver a working product)
  • Freedom to change your mind (change features)
  • Get what you need (not what you ordered)

Critical Elements

  • Ship early, ship often
  • Build first what creates most value
  • Never ever touch the deadline!
  • Plan a going-live party with customer

On time

On budget

  • Welcome change: Reprioritise, reorder, redo features (before sprint starts)
  • Stick to the process: No overtime, no changes in a running sprint (full concentration)
  • Bill every sprint ("when time is exhausted")

Fixed working hours = no renegotiation

Software that "simply works"

– tested!

I got what I need –


On time, on budget,

working solutions


  • (Failing) Traditional setup
  • (Successful) Test-driven setup
  • Why it makes sense
  • What do we need?

A) Sales Process

B) Project Execution

(Failing) Traditional Setup

  • Long acceptance test phase in the end
  • A lot of manual testing
  • Regression after bug fixes
  • No guarantee of stable implementation
  • Risky defects liability period

A closing test phase

Big bang release.

(Successful) Test-driven Setup

  • Acceptance test specification in concept phase
  • Tests implemented by programmers
  • Tests executed automatically
  • Extremely short handover in the end
  • Regression under control

Upfront specification

Building trust. Gaining speed.

Why It Makes Sense

  • No additional budget required
  • Product stability
  • Waste less money for bug fixing
  • Cheap repeatability of testing
  • Focus on advanced quality topics

Make the same things earlier.

What Do We Need?

1.  User stories

2.  Test specifications

Acceptance criteria = Scenarios.

Tools & Resources

Wow, isn't that what we were always looking for?

It's awesome, honey.

Buy it?

Buy it!

Thank you!

for your precious time

Painless Software

Less pain, more fun.

PyCon 7: Fix-Price Projects And Agile

By Peter Bittner

PyCon 7: Fix-Price Projects And Agile

You are a digital agency struggling with your Django projects. You’re over budget and you’ve run out of time, that’s the norm not the exception. And of course you promise to deliver all features on time for a fixed budget, don’t you? – And nobody told you this is a problem?

  • 4,767