October 14, 2004 tools

re: Business Object Design tools question

Today Ralph Loizzo asked me what tool I use to outline my objects, to which I replied:

The tool I use most often to design my systems is a text editor. I write my client code first against the objects I wish I had to obtain the first order of functionality I’m after, then implement those classes and refactor til I’ve reached a state of happiness between the clients and the object model.

In this age of development methodology du jour, I assume my methodology already has a name, but today I dubbed it CDD (Client-Driven Development). Also, I don’t distinguish between client UI code and lower-level code, i.e. just as often as I write lower-level code against an imaginary OM, I design my UIs first, then implement an OM to enable the UI.

Over the years, I’ve become less and less of a fan of the idea of componentizing the functionality you think the higher levels are going to need, as it often results in over-engineering. Instead, I prefer just-in-time engineering, refactoring my design as I need new or different functionality, whether in the client during the initial development stage or during the maintenance stage.

Test Driven Development is very similar to Client-Driven Development:

  • TDD: writing the tests first and writing your code ‘til the test pass
  • CDD: writing the client first and writing your code ‘til the client has the functionality it needs

It may even be that CDD is a degenerate case of TDD where the test” is the client seems to work.”