2007-11-08

Fail At Once

This message will be repeated in english.

Hur får man rättningar och funktionalitet så fort som möjligt genom dörren?
Hur får man så få buggar som möjligt i produktion?

Jag fick en gång kommentaren från en vän "Men du levererar väl aldrig otestad kod?". Det var en komplimang och en kommentar till att jag just då satt i ett projekt som skulle leverera den högsta kvaliteten jag levererat hittills, dessutom rakt ut i fabrik
Mitt svar förvånade honom "Jag testar inte." Jag lät honom hämta andan. "Rättning: jag testar så lite som möjligt och mycket kod går rakt ut i produktion otestad."

Sedan följde en förklaring. En förklaring jag har dragit för alla i projektet:

"Använd kompilatorn för att fånga fel."

Vanligtvis när man talar om system med hög kvalitet pratar man om testning. Massor med manuella tester med speciella konsulter man hyr in som är specialiserade på test. Dyrt. Men det blir dyrt med hög kvalitet.
Bullshit.

Manuella tester är dyrt och tar lång tid.

Modernare utveckling innehåller enhetstester.

Jag förespråkar Fail At Once för att slippa många enhetstester och manuella dito.


Det är viktigt att fånga fel så fort som möjligt. De allra bästa är att inte skriva dem alls.
Där är jag inte ännu.


How do you ship patches and functionality as fast as possible?
How do you get as few bugs as possible in production?

I once got a comment from a friend "But you never deliver untested code?" It was meant as a compliment and comment to my job then; I was working in a project that was delivering the highest quality I have ever delivered; right onto factory floor.
My answer surprised him "I don't test." I let him catch his breath. "Correction: I test as little as possible and as much code as possible goes into production untested."

I had to explain, the same explanation everyone in the project had heard.

"Use the compiler to catch errors."

Normally when one talks about high quality system one also mentions testing. Lots of manual tests with consultants specialised on testing. Expensive. But high quality is expensive.
Bullshit.

Manual tests are expensive and take lots of time.

The more modern unit testing is cheaper.

I recommend Fail At Once to get rid of many unit tests and manual ditto.


It is important to catch errors as fast as possible. The best is to not write them at all.
I am not there yet.

2 comments:

Chaos said...

// This message in English only

I hear you and I agree up to a point. To let the compiler catch the bugs catches most programming errors but it does not catch the hard to find and often dangerously destructive ones, i.e. the logical errors.

The compiler can never know if you in your comparison used the correct comparison operand, and there is a big difference between >, >=, ==, <=, <, !=, etc. Logical errors are easily found by unit tests that check both normal and extreme value scenarios. Or you could do the same test manually but that would be long and tedious work.

LosManos said...

Exactly.
Just like unit tests don't catch all errors, Fail at once does not catch all errors.

Heck, even manual tests don't catch all errors.

The idea is to use Fail at once to write fewer unit tests to write fewer manual tests.
To in the end get the same result with less code to maintain.