My design process

time to read 2 min | 302 words

Vijay Santhanam asks about the design process I takes for building:

How much analysis/OO modeling you do before you start writing real code? With tools like R#/SVN is the up-front design pretty much dead for garage projects?

My answer to that is complex. I don't do design. I don't think that I ever had. What I would do is something I call envisioning. I have posted several such things in the past, most recently it was Architecting Twitter.

A good way of describing that is this picture:


I am not really interested in the entire picture. I am interested in very small key parts of it. This foundation is what the entire application will revolve around. Very rarely I'll sit and try to draw out the entire system up front. And each and every time that I tried to do that I have had good reasons to regret it.

Once I identified the shape of the system, I I can start working on it. But the final result tend to be different than even the vague shape that I had at the beginning. I routinely modify the foundation of the system for the first part of the project, until it stable enough to fit what I want it to do comfortably.

I like to use tests and real use cases as the driving forces for this. A good sample of that can be seen with Rhino Security. I envisioned the system several months months before I actually wrote that, and while many of the high level concepts were retained, a lot of the infrastructure was shifted, as I faced real world constraints and had to solve them.