I was working on a project today and found myself struggling to keep a mental model of the architecture. The project has been growing for many months and it’s gotten a bit hairy, particularly since I am constantly rethinking how it needs to be put together.
The code itself is fairly readable since Go lends itself well to that, but the high level view is not always clear in my head.
Today in particular I felt the need to give my mind a diagram that shows the relation between the different systems. I reached for my favorite tools for that kind of work: the Lenovo Yoga Book and DrawExpress.
The Yoga Book
Look, it’s flawed, it’s weird, it’s probably not the tablet you want to own, but to me it’s the bee’s knees (I don’t know what that means, but knees bend and so does this tablet).
The Lenovo Yoga Book is a tablet with a full-size digitizer attached. It feels like a slightly thick and slightly heavy tablet when the digitizer is folded against the back of the screen, but unfold it and you have an extremely light and thin device.
With the digitizer out the tablet becomes a magnificent drawing device. Here’s why:
- The digitizer surface has a texture that makes the plastic stylus feel a bit like pencil on paper. When I draw on glass surfaces, as in a normal tablet, I find the “skating on glass” feel throws my drawing off.
- With the digitizer to the side of the screen or below it, I always see all of my drawing. When drawing on the upper left side of a tablet (or a piece of paper!) my hand covers the rest of my drawing, and I find myself moving my hand a lot more.
- No need to worry about my palm registering as an input. Some tablets have great palm rejection, and for others it’s necessary to wear weird gloves when drawing on touchscreens. I can’t relate. I can smother the digitizer surface with my palm and it registers nothing.
- I use both hands: one to pinch-to-zoom, one to draw. Each hand is on its own half of the device, so I don’t need to move them much. It’s efficient and steady.
This tablet has plenty of flaws (have a look at the negative reviews on Amazon) but the magic of the drawing experience makes it one of my favorite devices ever.
So that’s the hardware.
There are all kinds of drawing apps for mobile devices. Most simply retrace the movement of your stylus or finger using a brush of some sort. If you don’t have a steady hand you end up with horrifying squiggles. Hardly helpful.
I use these drawing apps too, but if I am out of practice my drawings are just painful to look at.
DrawExpress is different. It’s not a drawing app so much as it is gesture recognition interface with line-and-box drawing as its output.
DrawExpress doesn’t just log and retrace your trembly squiggles, instead it recognizes that what you drew looks kind of like a rectangle, so it draws a perfect rectangle for you. Trace a drunk circle that misses closing at its starting point by a mile, and it will draw a perfect one for you.
If you draw a line from more-or-less one rectangle to more-or-less another one, it draws a straight line connecting the two. Draw a arrowhead at the end of the line and guess what? The line becomes an arrow. And if the line is curved but bumpy, you’ll get a smooth curve. And so on.
Gestures aren’t just used for drawing, they’re for editing too. For example, tap a shape to select, then delete it by drawing an X on it.
I find this amazing. Think of how pretty much everything works on a computer: you find a button, and you hit the button. The button might be drawn in the UI, or it might be the del key on your keyboard, but it’s a button and your only interaction with it is to click it, tap it, or smash it. Future humans will find this amusingly primitive.
I find that when I draw an ‘X’ to remove something I am no longer communicating through a UI that I am aware of. It’s like my hand is the UI again, but now it’s incredibly stable and capable. It can make a perfect rectangle appear, and then disappear in a snap.
The video on DrawExpress’s site is broken, but it’s worth watching the one in the Play Store.
My Mind Went Bicycling
So this afternoon I pulled out the Lenovo, went all over the house looking for the stylus (I don’t use it that often, and where do you keep a pen-like thing that doesn’t write on paper?) and sat down at my desk.
With the code up on the iMac and the tablet where my keyboard normally is I set out to trace relations in my code. What object owns what? Who’s communicating with who?
I didn’t set out to do a formal diagram like UML or any such thing (though you can do that in DE), I just wanted to turn a mental hairball into something understandable.
From mental hairball, I drew squiggly ugly lines, and from those I ended up with this:
Looks simple doesn’t it? Yep, that’s the point.
This was day 5 of the #100DaysToOffload challenge.