Extreme Programming

For Lilax (Linux Users at LAX), 9 Feb 2002
Streaming video avaailable at lpbn.org

Most Software Projects Stumble or Fail

Common reasons for software project failure:


Writing specifications is hard

Ideally, customers write a specification for what they'd like, and programmers write a program according to the specification. Yet customers often have trouble expressing themselves, and the specification is nearly always missing crucial details.

Programmers Often Go Off Course

Programmers are perfectionists, and often want to get things just right. This leads to systems that are beautiful, feature-rich, and which do something really well. Unfortunately, programmers don't always know what's important to the customer, and end up making business decisions based on technical considerations. This wastes effort and disappoints customers.

Writing Software that Works is Hard

Ever make what should have been a simple change, and end up chasing down problems it caused for weeks? It happens more often than you'd expect.

Finishing a Project is Hard

The last 10% of the project -- polishing it so it works well -- often takes 50% of the time.

Testing is hard

Actual quote:
"Don't fix that bug; we just spent a month testing the product, and if you made any change now, we'd have to test all over again!"

Scheduling is hard

Nobody really knows how to estimate software projects more than a month or so in advance.

Yet managers write schedules covering the next six months.

Programmers secretly don't believe the schedules, yet are pressured into agreeing. The project then slips, everyone works overtime, the project ships full of bugs, and people burn out.


Best Practices

Most programmers try to do at least some of these some of the time.

What if...

What would happen if you followed all the 'best practices' all the time, all the way? That's Extreme Programming, and strangely enough, it actually works, and can help make both customers and programmers very happy.


Write unit tests first!

When writing a new module, programmers should write the interface first, then the unit test, and only then go on to implement the module.

This has several benefits:


[Return to kegel.com]