Sunday, February 15, 2009

BDUF...will it ever die?

It feels incredible to leave my consulting days in the past where I had to constantly explain and justify Evolutionary Design in the face of Big Design Up Front cowards.

This past week further cemented my beliefs that hard problems can NOT be solved by design sessions and paper models.

We found a deep seated problem with the strategy we had devised for controlling some hardware we build. There was a work around, but it was not elegant. The elegant solution was going to require some very complex thinking and an innovative UI to drive it all.

After talking through the problem and some solutions for an hour or so, most people were excited about the change, but wary of its complexity. We have our first release coming up in 5 weeks and this was changing the very heart of the system in a radical way.

Despite (or I would say 'because') of the complexity involved. We eschewed long design sessions in favor of a couple of focused tech spikes. One on the UI sense it was using a metaphor that was not common, and one that got the hard logic of the middle tier working.

We drove the whole thing with unit tests. Made several significant course corrections mid-stream, but solved the entire problem in about 3 days of work.

Looking back there was no way to solve this problem by designing it up front. There were simply too many moving parts. Paper designs do not let you eliminate complexity from your mind. But unit tests let you 'forget' about all the tiny decisions you have made and look forward...breaking the monolithic problem you are faced with into a lot of small problems that are all solvable.

What had seemed like a nearly insurmountable problem when talking about it at a white board that first day has been effectively implemented and tested just a few days later. Everyone involved was surprised at how much easier the problem was in the end.

And that is the crux. Evolutionary design tactics using tools like TDD, autotest, and of course our favorite language of Ruby, has allowed us to actually solve the problem rather than sitting around a design tool mentally masturbating on it.