We all know that exercise is good for us, members of the species Homo Sapiens Sitonourasses. And yet most of us don’t do enough of it. The same is true for Test-Driven Development (TDD). But the similarity doesn’t end there.
With regular exercise, you can grow your muscles. The way this works is not linear, however. It follows an upward saw-tooth pattern: first you damage your muscles (training), then they heal (recovery) and eventually grow stronger than before (supercompensation), then you damage them again, etc:

TDD follows the Damage-Heal-Grow cycle as well.
First we damage the system by writing a test that fails. Where before we could gloat in knowing all was well because our test suite said so, now we have to admit that there is still something wrong with our code. For some, this realization may hurt as much as their sore muscles after working out.
Luckily, we heal the system quickly by writing only the minimal amount of code required to make the test pass. With everything back to green in minutes or even seconds, we have every right to feel good again. TDD is perfect for short-attention spans.
Finally we grow the system by improving the design. The system can now handle everything we’ve ever thrown at it and more, because we generalized concepts and gave them a proper place in the code.
Damaging and healing happen on two levels in TDD.
First there is the syntactic level. You write a test that calls code that doesn’t exist yet, so the code doesn’t even compile. The healing that follows is to make the code compile, even though it doesn’t yet pass the test.
Only after this syntactic healing do you change the code to pass the test. The latter is more of a semantic type of healing.
The distinction between syntactic and semantic healing has implications for how we work.
There are only so many ways that a program can be syntactically broken, and in many cases, a sophisticated enough IDE can help heal it. For example, when you write a test that refers to a class that doesn’t yet exist, Eclipse offers a Quick Fix to create the class for you.
Semantic healing, on the other hand, is more difficult. The transformations of the Transformation Priority Premise can be seen as standard building blocks, and at least some of them can be automated. But that’s still a long way from the IDE generating the code that will make the failing test pass.
I haven’t seen many TDD practitioners do the equivalent of walking around the beach showing off their rock-hard abs, and that’s probably a good thing.
But just as we appreciate how a strong, muscular friend can easily handle any piece of furniture when he helps us move, so do product owners like it that we can always deliver any feature in a short amount of time.
Unfortunately, it just doesn’t score us any dates; for that we really do need to hit the gym.
Exposing your data or application through a REST API is a wonderful way to reach a wide audience.
URIs shouldn’t be known to anybody but the API designer/developer; the client will discover them through
In
One
Last time, I wrote about
If your organization doesn’t have something like our PSO, you can look elsewhere. (And if it does, you should look outside too!)
You may think you know very little yet, but even then it’s valuable to share.
I work at
The
For authentication in an HTTP world, it makes sense to look at
If you’re in the HTTP API building and/or consuming business –and who isn’t these days– then please go ahead and read the draft and
XACML is dead. Or
I don’t understand this statement at all, as there is nothing in the XACML spec that depends on centrally managed users.
I guess what they mean is that fine-grained access control doesn’t work well in high latency environments. If so, sure.




Chapter 5, Handling Input, describes how programs should deal with untrustworthy input.
Chapter 11, Privacy and Secrets, switches the focus from 
If you don’t call the
If you do that, you can change the cryptographic algorithm and/or implementation without issuing a patch. This is particularly valuable when a new attack on an (implementation of an) algorithm becomes available. The JCA makes it easy to configure the use of cryptography. The 
Another thing to look out for is that code requires 
You must be logged in to post a comment.