The Four Project Values


Simplicity

We strive always to “do the simplest thing that could possibly work“. We’re quite serious about this. We have found that with the right architecture and correctly-factored code, we can rapidly extend our software when the need arises. If we work on something “we’re gonna need“, we’re not working on something we DO need.

Communication

We emphasize communication in every way. In our code, we all use the same formatting conventions, naming conventions, and coding standards. This means that all methods, no matter who wrote them, look familiar and are easy to understand when we come upon them.

We code so as to express intention, not algorithm. Our method names say what they accomplish, not how they accomplish it. At every level, we try to make our methods read like a human description of what is going on.

So that we can communicate design, we do it the same way, using CRC cards. Whenever we begin to work on some new objects, a few of us will sit down and do some cards. Whenever we make big changes, we’ll get a larger group together and work out what is to be done. But what about the formal documentation?

Testing

We are fanatics for testing. We would like to have more lines of test than we do of actual code. Every class must have a corresponding unit test class. Each public method should have at least one unit test method. We presently have over 1400 unit tests in the system.

When we release code, all the unit tests must run at 100%. You can’t release unless they do: if they don’t, you fix the problem immediately.

We have functional tests as well, that test the system from end to end by paying one or more people and checking the results. There are hundreds of functional tests.

The result of all this testing is that we know the system works, and when we make errors we find them immediately.

Aggressiveness (Fearlessness)

The result of the other three values is that we can be aggressive, or fearless. We can change any part of the system to be better because we know we have a solid system of tests. We can try things and if we don’t like how they work, we throw them away and try again. We know we won’t break the system, which gives us the confidence to move forward rapidly.

Posted on:

Written by: Ron Jeffries

Categorization: Practices

Recent Articles

Scrum Information Base — Agile Skills

Chet Hendrickson and I have offered to help the Scrum Alliance build a broad and growing base of information relating to Scrum / Agile, and to the many skills and practices that can help teams be successful. Our offer has…

The Gift … a Report and a Request

The Story in Brief

At Agile2011, I brought along a “gift”, a nicely formatted and illustrated Kate Oneal story. I gave a copy to everyone who asked for one, and to a few people who didn’t but who I wanted…

Events & Classes

  • No events.