From the archive

The Power of Diagramming

Pick up a pencil and paper, get to a whiteboard and marker, or fire up your favorite diagramming tool. It does not really matter. Just pick your poison and get the ideas flowing.

I am work through building an HTTP server in java and there are a lot of pieces. Thinking about how they all fit together can get to be a bit much to hold in my head all the time. Okay, It is do able but when it is done I think that there are valuable insights that can be lost and that it is really a disservice. Keeping everything upstairs smart can really cause losing out on seeing patterns, realizing what data that is being passing around all the time, and getting a change to really observe the flow and the connections of how everything is fitting together. When I talk about seeing patterns, I am not only talking about design patterns. I think that there is a good opportunity to see duplication and to be able to look at the design overall and see what the heart of it is doing. I am a pretty damn good multi-tasker and I was amazed what happened when I went through this process.

Doug was the one who suggested to me to draw things out. He showed me some basic UML and let me run with it. I started with these small boxes, connecting things together. It really got my wheels spinning with a lot of ideas and realizations. Those boxes could no longer contain all the information and if you looked at it quickly(and arguably much more closely) it looked like the ramblings of a madman. Maybe they are. :) I needed more paper. Then I added more details and the process repeated itself. I did this whole process about 4 times. Each time more detailed, with more realizations, and more patterns emerging. I ended up in a spot that was different than where I had started. It was not drastic but there were significant realizations that brought me to what I would consider a better architecture that is much more clear. I believe that the considerations have made things more flexible and less dependent. Time will tell since I am working on the implementation now. I would like to think that I can catch all the details before I start programming but that is pretty unrealistic. What I am optimistic about is that when there are details that will mandate change, my system will be flexible enough to have to be wholly reconsidered. I believe I may just be realistic. I am making a hypothesis here so I will follow this up when I am finished.(potentially with some code examples as a demonstration of my point.)

okay, time to go implement my sweet design.