When I first started programming, I would design via drawings. Creating boxes to represent database tables or components or what have you. Lots of rectangles and lines. I remember it being meditative.
Yesterday I was tasked with designing a system for self-deposit of items to a digital archive. I was asked to deliver the diagram of interacting components. This caused me mental anguish because what ultimately needs to exist for this service is a complex collection remote services, local processes, system behavior, and data structures.
And it struck me hard in the face, I don’t want to design by drawings. I want to design by text. After all, most of my professional hours have been devoted to writing in code. But I don’t want to start coding.
But here I sit, thinking about what all I need to design. And it hits me: I need to define the end-user interaction with the system. So I’m writing down what the user sees on the first page after they login, the actions they can take to begin archiving their own material, or the material of their professor, or the material of the entity for which they are a delegate.
With this initial list for after they login, things will spread out to other lists. And slowly I can explore the system through words.
And then, we’ll break out the crayons and start drawing our interpretation of those words are.