by Jason Williscroft
Let’s talk about design.
There’s a lot of room between requirements and code. Modern software engineering practice involves a lot of shared code, so it can be a challenge to draw direct lines between a given requirement and a particular line of code. It’s just more complicated than that.
There has to be a middle layer: some mechanism that translates the human language of the requirement into the logical language of code. That’s what happens between a coder’s eyeballs and his keyboard.
Another modern software engineering practice is review: the idea that the act of communicating an idea sharpens it. So the middle layer should be subject to review. But how is one coder to review the contents of another coder’s mind?
The answer is design: artifacts that express a coder’s intent in a manner that can be understood both by the business—so they can be checked against requirements—and by coders, so that one coder can execute another’s design with high fidelity.
Good design artifacts accomplish precisely that. Really good design artifacts accomplish it with an absolute minimum effort: economy of design. Design artifacts are often visual, because pictures are good at abstracting clear concepts out of the noise of implementation. And really good ones? They paint a picture that communicates their message at a glance with precision, impact, and clarity.
In other words: they are beautiful.
Good software design saves time and money, because bad ideas see the light of day before they are memorialized in code. Great software design is an exercise in creative communication, which brings minds into the full reach of the problem-solving space that would otherwise not know how to access it.
That’s a lot of bang for the price of a Visio license.