It has been a month since the last update and I wanted to fill ya'll in about what we've been up to.
Our primary focus for the past month has been on redesigning the layout system.
Please see (and add to!) the discussion topic.
In particular, I have been writing out arguments and explanations for both design decisions that we've already made (e.g., why Subform organizes elements in a tree) and for things that are currently on the drawing board (the alternative layout systems).
One benefit of stepping back is a new perspective --- for me, the new perspective underscores that Ryan and I are in the business of developing concepts.
Any statement about layout relationships is chock full of concepts: "Position this box 10px from the right side of that box" implies concepts about boxes (which have distinct sides), absolute units of measurement, that layout can be defined as pairwise relationships between (sides of) boxes, etc.
Our challenge is to figure out which concepts Subform should explicitly support.
There are tradeoffs to balance, for example, expressiveness and understandability.
It's very expressive and precise to say: "These elements should each be 100px from point P, and the angular distance between them evenly spaced", but is that a layout relationship Subform should support?
Probably not; the cognitive complexity cost to support "polar coordinates" would likely not be worth the benefit, as angular distribution occurs much less often in most UI designs than vertical and horizontal spacing.
Ryan has been collecting lots of different UI designs, and we've been using those designs to "test" the expressive power of proposed layout systems.
We feel like we're on a promising direction, but it will take some time to actually prototype it on paper, not to mention for me to write out all the code. = )
Two interesting pieces I found in the past month relating to concepts:
Of course, I go a little stir crazy if all I do is think/write, so I have been writing a bit of code too.
In particular, I'd like to make Subform fast, since responsive tools are essential to getting into a state of cognitive flow.
Before I can optimize performance, I need to be able to measure, so I've been looking at how to properly measure the only metric I care about: How long it actually takes to paint to your screen.
It turns out that, while there are plenty of ways to measure your own code, it's tricky to get a straight answer out of the operating system when you ask, "I gave you that thing to paint. How long did it actually take you to paint!?"
So I'm looking into that too.
Have a great holiday season, and best wishes from Ryan and I for a prosperous new year!